2013-09-26 19 views
12

पर आईएसएनएन पोर्टिंग जब मैं जीसीसी 4.6 से जीसीसी 4.8 में कंपाइलर संस्करण स्विच कर रहा हूं तो मुझे निम्न त्रुटि त्रुटि मिलती है: अधिभारित 'इस्नान (डबल)' की कॉल संदिग्ध है।सी ++ 11

इसका कारण यह है C++ 11 में वहाँ differend समारोह घोषणाओं हैं: सी: पूर्णांक isnan (डबल) सी ++ 11: bool isnan (डबल)

cpluplus से

:

  • सी में, यह एक मैक्रो के रूप में लागू किया जाता है जो एक int मान देता है। एक्स का प्रकार फ्लोट, डबल या लम्बा डबल होगा।
  • सी ++ में, यह प्रत्येक फ्लोटिंग प्वाइंट प्रकार के लिए समारोह भार के साथ लागू किया गया है प्रत्येक एक bool मूल्य लौटने।

मैं इसे कैसे ठीक कर सकता हूं?

+1

तुम इसे कैसे बुला रहे हैं? हमें संदर्भ दिखाएं। –

+0

juanchoupanza सुझाव काम किया। मैंने पहले नामस्थान एसडीडी का उपयोग करने की घोषणा की थी, लेकिन मुझे इसे किसी भी तरह से इस्नान कॉल में प्रीपेड करना पड़ा क्योंकि यह अस्पष्टता का स्रोत था। –

+16

यह बिल्कुल सही है 'हर जगह नेमस्पेस std' का उपयोग करें। –

उत्तर

13

आप using namespace std; हर जगह नहीं कह कर इस समस्या को कम कर सकते हैं, आप इसे स्पष्ट होने से std::isnan उपयोग के बारे में बच सकते हैं:

#include <cmath> 
#include <iostream> 

int main() 
{ 
    double x = ....; 
    std::cout << std::boolalpha; 
    std::cout << std::isnan(x) << std::endl; 
} 
+0

यह दृष्टिकोण निश्चित रूप से काम करेगा लेकिन बड़े कोडबेस में "नेमस्पेस std का उपयोग करके" निकालना उचित नहीं होगा क्योंकि इसे बहुत सारे बदलावों की आवश्यकता हो सकती है। – wazza

+0

@wazza यह कोड टूटा हुआ छोड़ने से अधिक उपयुक्त होगा। 'नेमस्पेस std का उपयोग कर;' मुसीबत के लिए एक नुस्खा है। मुझे लगता है कि कोड से इसे शुद्ध करने में समय व्यतीत करने का समय अच्छा रहता है। – juanchopanza