2016-05-09 2 views
-3

У меня есть следующий код в моем проекте Eclipse,Defined макрос не признал

#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; 
} 

Проблема заключается в том, что я получаю следующее сообщение об ошибке от компилятора

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

Я не понимаю, что в проблема случается. Я построил проект с помощью CMake, используя ECLIPSE CDT4 - MinGW Makefiles в качестве генератора. Есть рекомендации?

+0

Вы можете попробовать '__MINGW32__' вместо' WIN32' ...? Или, может быть, '_WIN32'? Вы можете попробовать '-E' видеть вывод компилятора после предварительной обработки, а затем искать это для' M_PI'. –

+0

В вашем сообщении не указано, какое условие в '# ifdef' было запущено. Это условие «WIN32» или нет? – PaulMcKenzie

+0

Определяется ли 'WIN32'? – immibis

ответ

5

WIN32 не тот макрос. На самом деле это _WIN32. В любом случае, это макрос, определенный Visual Studio C++, но вы используете MinGW, поэтому фактический макрос для проверки равен __MINGW32__ или (64). Это по-прежнему является неправильным способом делать вещи, так как MSDN требует:

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

Для того, чтобы получить доступ к математическим константам. MinGW already does this.