Eun*_*Kim 28 c++ development-environment compile-time-constant
当我编译下面的代码时,我收到以下错误消息:
(Error 1 error C2065: 'M_PI' : undeclared identifier
2 IntelliSense: identifier "M_PI" is undefined)
Run Code Online (Sandbox Code Playgroud)
这是什么?
#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;
}
Run Code Online (Sandbox Code Playgroud)
She*_*hep 55
根据他们的文档,听起来你正在使用MS的东西
数学常量未在标准C/C++中定义.要使用它们,必须首先定义_USE_MATH_DEFINES,然后包含cmath或math.h.
所以你需要类似的东西
#define _USE_MATH_DEFINES
#include <cmath>
Run Code Online (Sandbox Code Playgroud)
作为标题.
Hem*_*war 20
math.h
M_PI
默认情况下不定义.所以顺其自然:
#ifndef M_PI
#define M_PI 3.14159265358979323846
#endif
Run Code Online (Sandbox Code Playgroud)
这将处理您的标头已M_PI
定义或未定义的两种情况.
M_PI
海湾合作委员会也支持,但你要做一些工作才能得到它
#undef __STRICT_ANSI__
#include <cmath>
Run Code Online (Sandbox Code Playgroud)
或者如果你不喜欢污染你的源文件,那就去做吧
g++ -U__STRICT_ANSI__ <other options>
Run Code Online (Sandbox Code Playgroud)
正如上面shep所指出的,你需要类似的东西
#define _USE_MATH_DEFINES
#include <cmath>
Run Code Online (Sandbox Code Playgroud)
但是,您还包括iostream
.
iostream
包括很多东西,其中之一最终包括cmath
. 这意味着当您将它包含在文件中时,所有符号都已定义,因此当您包含它时它会被有效地忽略并且#define _USE_MATH_DEFINES
不起作用
如果你cmath
在iostream
它之前包含它应该给你更高精度的常量,比如M_PI
#define _USE_MATH_DEFINES
#include <cmath>
#include <iostream>
Run Code Online (Sandbox Code Playgroud)
对于 Windows 10(和 Windows 11)使用此包含:
#include <corecrt_math_defines.h>
Run Code Online (Sandbox Code Playgroud)