तो मैं सिने से वैध पूर्णांक इनपुट प्राप्त करने का प्रयास कर रहा था, और इस question का उत्तर उपयोग किया।मैं windows.h में अधिकतम मैक्रो से कैसे निपटूं मैं std में अधिकतम के साथ टकरा रहा हूं?
यह अनुशंसा की:
#include <Windows.h> // includes WinDef.h which defines min() max()
#include <iostream>
using std::cin;
using std::cout;
void Foo()
{
int delay = 0;
do
{
if(cin.fail())
{
cin.clear();
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
cout << "Enter number of seconds between submissions: ";
} while(!(cin >> delay) || delay == 0);
}
कौन सा मुझे विंडोज पर एक त्रुटि देता है, कह रही है कि max
मैक्रो है कि कई तर्क नहीं लेता है। जिसका अर्थ है कि मुझे यह
do
{
if(cin.fail())
{
cin.clear();
#undef max
cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
}
cout << "Enter number of seconds between submissions: ";
} while(!(cin >> delay) || delay == 0);
इसे काम करने के लिए करना है। वह बहुत बदसूरत है; क्या इस मुद्दे के आसपास काम करने का एक बेहतर तरीका है? शायद मुझे max
की परिभाषा संग्रहित करनी चाहिए और इसे बाद में फिर से परिभाषित करना चाहिए?
आप शामिल है:
कोड नमूना दृष्टिकोण वर्णन करने के लिए? क्यूं कर? यदि आपको वास्तव में इसकी आवश्यकता है तो आप इसे शामिल करने से पहले ** NOMINMAX ** को परिभाषित करके _min_ और _max_ मैक्रोज़ को परिभाषित करने से बच सकते हैं। –
क्या आप "नेमस्पेस std" का उपयोग कर रहे हैं? यदि ऐसा है, तो आप जानबूझकर नामस्थानों को जोड़ रहे हैं। –
@ पॉलबिकिंगहम: मैक्रोज़ में कोई नेमस्पेस नहीं है, और इस प्रकार विंडोज़ सहित किसी भी सावधानी के बिना हमेशा 'std :: min'/'std :: max' – PlasmaHH