2013-09-26 15 views
12

Derleyici sürümünü gcc 4.6'dan gcc'ye değiştirdiğimde 4.8 Aşağıdaki hataya ulaşıyorum hata: aşırı yüklenen 'isnan (çift)' çağrısı belirsiz. : C: int isnan (çift) C++ 11: BOOL isnan (çift) cpluplus denportting isnan to C++ 11

:

  • C++ 11 tiplerimiz fonksiyon tanımlamaları vardır, çünkü

    Bu

    olduğu C'de, bu bir int değeri döndüren bir makro olarak uygulanır. X tipi float, double veya long double olacaktır.
  • C++ uygulamasında, her bir kayan nokta türü için her biri bir bool değeri döndüren işlev aşırı yükleri ile uygulanır.

Bunu nasıl düzeltebilirim? Her yerde using namespace std; demiyorum bu sorunu hafifletmek rağmen

+1

? Bize içeriği göster. –

+0

juanchoupanza öneri işe yaradı. Daha önce namespace std kullanarak bildirilmiştim, ama yine de isnan çağrısına, bu belirsizliğin kaynağı olduğu için hazırlamalıydım. –

+16

Bu, her yerde 'names names std 'harfini kullanmanın tam olarak yanlış tarafı. –

cevap

13

, sen std::isnan kullanma hakkında açık kalarak bunu önleyebilirsiniz: Bunu nasıl aradığınız

#include <cmath> 
#include <iostream> 

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

Bu yaklaşım kesinlikle işe yarayacaktır, ancak çok fazla sayıda değişikliğe ihtiyaç duyabileceği için büyük bir kod tabanında "namespace std kullanarak" kaldırılması uygun olmayacaktır. – wazza

+0

@wazza Kodu bozulduğundan daha uygun olacaktır. namespace std; 'kullanarak sorun için bir reçete. Zaman harcanan zaman harcanan zaman harcanan zaman harcanan zaman olduğunu düşünüyorum. – juanchopanza