2016-05-09 33 views
-3

Ich habe den folgenden Code in meinem Eclipse-ProjektDefined Makro nicht erkannt

#pragma once 

#ifdef WIN32 // Compiler enters here ! 
    #define M_PI 3.14159265358979323846 
#else 
    #include <cmath> 
#endif 

#ifndef INFINITY 
    #define INFINITY FLT_MAX 
#endif 

inline float Radians(float deg) 
{ 
    return ((float)M_PI/180.f) * deg; 
} 

Problem ist, dass ich die folgende Fehlermeldung vom Compiler immer

Luzoso.hpp:22:20: error: 'M_PI' was not declared in this scope 
    return ((float)M_PI/180.f) * deg; 

Ich verstehe nicht, was die Problem könnte sein. Ich habe das Projekt mit CMake unter Verwendung von ECLIPSE CDT4 - MinGW Makefiles als Generator erstellt. Irgendwelche Ratschläge?

+0

Sie könnten '__MINGW32__' anstelle von' WIN32' versuchen ...? Oder vielleicht '_WIN32'? Sie können versuchen, '-E' zu sehen, Compiler-Ausgabe nach der Vorverarbeitung, dann suchen Sie das für' M_PI'. –

+0

Ihr Beitrag zeigt nicht an, welche Bedingung im '# ifdef' ausgelöst wurde. War es die WIN32-Bedingung oder nicht? – PaulMcKenzie

+0

Ist 'WIN32' definiert? – immibis

Antwort

5

WIN32 ist nicht das richtige Makro. Es ist eigentlich _WIN32. So oder so, das ist ein Makro, das von Visual Studio C++ definiert wird, aber Sie verwenden MinGW, so dass das zu prüfende Makro __MINGW32__ oder (64) ist. Dies ist immer noch der falsche Weg, Dinge zu tun, da MSDN erfordert:

#define _USE_MATH_DEFINES // for C++ 
#include <cmath> 

Um die mathematischen Konstanten zuzugreifen. MinGW already does this.