Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[GCC] error: 'M_PI' was not declared in this scope

Ostatnio zmodyfikowano 2017-07-18 21:49
Autor Wiadomość
jankowalski25
Temat założony przez niniejszego użytkownika
[GCC] error: 'M_PI' was not declared in this scope
» 2012-01-10 20:35:21
Fragment biblioteki math.h (dołączonej do cmath):
C/C++
/* Traditional/XOPEN math constants (double precison) */
#ifndef __STRICT_ANSI__
//inne stałe...
#define M_PI 3.14159265358979323846
//inne stałe...
#endif
Kod z dokumentacji:
C/C++
#include <cstdio>
#include <cmath>

int main()
{
    printf( "Wartosc = %.10f", M_PI );
    return 0;
}
Występuje błąd:
error: 'M_PI' was not declared in this scope

Aby rozwiązać ten problem, wpisuję przed dołączeniem cmath:
#undef __STRICT_ANSI__

Czy powinno się tak pisać, aby korzystać ze stałych matematycznych?
Jeśli tak, to można tą informację umieścić w dokumentacji (są wskazówki do Visuala, ale nie do Code::Blocks'a).
Jeśli jest to zły sposób, to jak należy to robić?
P-47897
DejaVu
» 2012-01-10 22:09:19
A czemu używasz STRICT ANSI?

/edit:
Przeczytaj sobie to: http://www.network-theory.co.uk/docs/gccintro/gccintro_28.html
P-47907
jankowalski25
Temat założony przez niniejszego użytkownika
» 2012-01-11 06:27:01
A czemu używasz STRICT ANSI?
Ponieważ tam znajduje się M_PI. Aby uaktywnić M_PI, __STRICT_ANSI__ musi być niezdefiniowane, dlatego próbuję usunąć tą definicję przez undef. Chyba jest automatycznie zdefiniowana przez kompilator, nie wiem, szukałem w bibliotece i nie znalazłem jej definicji, może jest w innej bibliotece? Jest jakiś lepszy sposób? Przeczytałem to, co było na tej stronie, ale nie znalazłem tam tego, czego trzeba.
Skoro to zły sposób, to jak należy uaktywnić M_PI?
P-47933
DejaVu
» 2012-01-11 13:07:42
Chyba jednak nie czytałeś tego linku co Ci podałem :)
P-47937
odkrywca
» 2017-07-18 20:29:32
<< Removed by DejaVu - załóż własny temat >>
P-163416
jankowalski25
Temat założony przez niniejszego użytkownika
» 2017-07-18 21:49:55
Kompilowałem wtedy całość z flagą
-ansi
, aby rozwiązać problem wystarczyło ją usunąć (lub samodzielnie zdefiniować
M_PI
 i inne rzeczy, które nie są "ściśle zgodne z ANSI", jeśli z jakiegoś powodu trzeba użyć tej flagi).
P-163422
« 1 »
  Strona 1 z 1