2014-09-26 21 views
12

Wenn ich den Code zu kompilieren, ich habe diese Fehlermeldungen:M_PI markiert als nicht deklarierter Bezeichner

(Error 1 error C2065: 'M_PI' : undeclared identifier 
2 IntelliSense: identifier "M_PI" is undefined) 

Was ist das?

#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

verschmutzen, tun M_PI ist nicht wirklich Teil des Standards, also keine Garantie, dass es in math.h definiert wurde. – AndyG

+11

Und * bitte * ** bitte ** verbessern Sie Ihren Titel. – OJFord

Antwort

14

math.h definiert nicht M_PI standardmäßig. Also mit diesem gehen:

#ifndef M_PI 
    #define M_PI 3.14159265358979323846 
#endif 

Diesen beiden Fällen behandeln entweder Ihr Kopf M_PI definiert hat oder nicht.

40

Es klingt wie Sie MS Sachen verwenden, nach their docs

Math Konstanten werden nicht in Standard C/C++ definiert. Um sie zu verwenden, müssen Sie zuerst _USE_MATH_DEFINES definieren und dann cmath oder math.h.

Sie müssen also so etwas wie

#define _USE_MATH_DEFINES 
#include <cmath> 

als Header.

+2

Ich verwende Visual Studio 2013, deshalb läuft das nicht richtig? läuft es in g ++? –

+0

Lieber Eunsu, wenn Sie in der Kopfdatei inside "Exsternal Abhängigkeiten" von Visual Studio 2013 gehen, können Sie sehen, dass dieser Teil des Codes ist: ‚#if defined (_USE_MATH_DEFINES) && definiert (_MATH_DEFINES_DEFINED) /* **** */ #define M_PI 3,14159265358979323846 /* **** */ endif‘ Wenn Sie diese #define M_PI verwenden möchten Sie _USE_MATH_DEFINES mit einem #define definieren. Das ist der Grund! – Leos313

+0

Es macht Sinn, aber funktioniert nicht für mich ... Ich benutze VS 2015 Community ... –

2

M_PI wird auch von GCC unterstützt, aber Sie haben einige Arbeit zu tun es

#undef __STRICT_ANSI__ 
#include <cmath> 

zu erhalten oder wenn Sie Ihre Quelldatei nicht dann

g++ -U__STRICT_ANSI__ <other options> 
+0

Dies funktioniert im Allgemeinen nicht – FKaria