M_PI flagged as undeclared identifier

前端 未结 5 1693
走了就别回头了
走了就别回头了 2020-12-24 05:36

When I compile the code below, I got these error messages:

(Error  1   error C2065: \'M_PI\' : undeclared identifier 
2   IntelliSense: identifier \"M_PI\"          


        
相关标签:
5条回答
  • 2020-12-24 06:17

    M_PI is supported by GCC too, but you've to do some work to get it

    #undef __STRICT_ANSI__
    #include <cmath>
    

    or if you don't like to pollute your source file, then do

    g++ -U__STRICT_ANSI__ <other options>
    
    0 讨论(0)
  • 2020-12-24 06:30

    It sounds like you're using MS stuff, according to their docs

    Math Constants are not defined in Standard C/C++. To use them, you must first define _USE_MATH_DEFINES and then include cmath or math.h.

    So you need something like

    #define _USE_MATH_DEFINES
    #include <cmath>
    

    as a header.

    0 讨论(0)
  • 2020-12-24 06:32

    As noted by shep above you need something like

    #define _USE_MATH_DEFINES
    #include <cmath>
    

    However you also include iostream.

    iostream includes a lot of stuff and one of those things eventually includes cmath. This means that by the time you include it in your file all the symbols have already been defined so it is effectively ignored when you include it and the #define _USE_MATH_DEFINES doesn't work

    If you include cmath before iostream it should give you the higher precision constants like M_PI

    #define _USE_MATH_DEFINES
    #include <cmath>
    #include <iostream>
    
    0 讨论(0)
  • 2020-12-24 06:36

    math.h does not define M_PI by default.

    So go with this:

    #ifndef M_PI
        #define M_PI 3.14159265358979323846
    #endif
    

    This will handle both cases either your header have M_PI defined or not.

    0 讨论(0)
  • 2020-12-24 06:42

    I used C99 in NetBeans with remote linux host with its build tools.
    Try adding #define _GNU_SOURCE and add the -lm during linking.

    0 讨论(0)
提交回复
热议问题