2014-09-26 25 views
12

Quando compilo il codice qui sotto, ho avuto questi messaggi di errore:M_PI contrassegnato come identificatore non dichiarato

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

Che cosa è questo?

#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

M_PI non è in realtà parte dello standard, quindi non è garantito che sia stato definito in matematica.h – AndyG

+11

E * per favore * ** per favore ** migliorare il titolo. – OJFord

risposta

14

math.h non definisce M_PI di default. Quindi, andare con questo:

#ifndef M_PI 
    #define M_PI 3.14159265358979323846 
#endif 

Ciò gestire entrambi i casi sia l'intestazione hanno M_PI definiti o meno.

40

Sembra che si sta utilizzando MS roba, secondo their docs

Math costanti non sono definiti nello standard C/C++. Per usarli, devi prima definire _USE_MATH_DEFINES e quindi includere cmath o math.h.

quindi è necessario qualcosa di simile

#define _USE_MATH_DEFINES 
#include <cmath> 

come intestazione.

+2

sto usando Visual Studio 2013 questo è il motivo per cui non funziona correttamente? è in esecuzione in g ++? –

+0

Caro Eunsu, se si va all'interno del file testa dentro "Exsternal Dipendenze" di Visual Studio 2013, si può vedere che questo è parte del codice: '#if defined (_USE_MATH_DEFINES) && definito (_MATH_DEFINES_DEFINED) /* **** */# define M_PI 3.14159265358979323846 /* **** */#endif ' Se si desidera utilizzare questo #define M_PI è necessario definire _USE_MATH_DEFINES con una #define. Questo è il motivo! – Leos313

+0

Ha senso ma non funziona per me ... Sto usando VS 2015 Community ... –

2

M_PI è supportato da GCC troppo, ma hai a fare un certo lavoro per ottenerlo

#undef __STRICT_ANSI__ 
#include <cmath> 

o se non ti piace di inquinare il file sorgente, quindi fare

g++ -U__STRICT_ANSI__ <other options> 
+0

Questo non funziona in generale – FKaria

Problemi correlati