当我编译下面的代码时,我收到了以下错误消息:
(Error 1 error C2065: 'M_PI' : undeclared identifier
2 IntelliSense: identifier "M_PI" is undefined)
这是什么?
#include <iostream>
#include <math.h>
using namespace std;
double my_sqrt1( double n );`enter code here`
int main() {
double k[5] = {-100, -10, -1, 10, 100};
int i;
for ( i = 0; i < 5; i++ ) {
double val = M_PI * pow( 10.0, k[i] );
cout << "n: "
<< val
<< "\tmysqrt: "
<< my_sqrt1(val)
<< "\tsqrt: "
<< sqrt(val)
<< endl;
}
return 0;
}
double my_sqrt1( double n ) {
int i;
double x = 1;
for ( i = 0; i < 10; i++ ) {
x = ( x + n / x ) / 2;
}
return x;
}
答案 0 :(得分:52)
数学常量未在标准C / C ++中定义。要使用它们,必须首先定义_USE_MATH_DEFINES,然后包含cmath或math.h。
所以你需要像
这样的东西#define _USE_MATH_DEFINES
#include <cmath>
作为标题。
答案 1 :(得分:18)
math.h
未定义M_PI
。
所以请坚持下去:
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
这将处理您的标头是否已定义M_PI
的情况。
答案 2 :(得分:7)
M_PI
,但是你需要做一些工作来获得它
#undef __STRICT_ANSI__
#include <cmath>
或者如果您不想污染源文件,请执行
g++ -U__STRICT_ANSI__ <other options>
答案 3 :(得分:1)
如上文所述,您需要类似
#define _USE_MATH_DEFINES
#include <cmath>
但是您还包括iostream
。
iostream
包含很多内容,其中之一最终包含cmath
。这意味着,当您将其包含到文件中时,所有符号都已定义,因此当您将其包含在内且#define _USE_MATH_DEFINES
无效时,它会被有效忽略
如果在cmath
之前包含iostream
,则应该为您提供精度更高的常量,例如M_PI
#define _USE_MATH_DEFINES
#include <cmath>
#include <iostream>
答案 4 :(得分:0)
我在带有远程linux主机的NetBeans中使用C99及其构建工具。
尝试添加#define _GNU_SOURCE
,并在链接期间添加-lm
。