Frage zu <cmath>
-
Ich bin gerade in der MSDN auf folgendes gestoßen:
<cmath>
namespace std {#include <math.h> };Include the standard header <cmath> to effectively include the standard header <math.h> within the std namespace.
Das bedeutet doch nichts anderes, als dass die alte <math.h> in den Namespace std geladen wird, oder? Warum funktioniert dann aber sowas nicht:
// test.cpp: kleines Testprogramm #include <cmath> int main(int argc, char* argv[]) { std::sqrt(12); }
Der Compiler quittiert das mit zwei Fehlern:
G:\Smasher\Programmierung\C++\test\test.cpp(10) : error C2653: 'std' : Keine Klasse oder Namespace
G:\Smasher\Programmierung\C++\test\test.cpp(10) : error C2065: 'sqrt' : nichtdeklarierter BezeichnerSowas hingegen funktioniert:
// test.cpp: kleines Testprogramm #include <cmath> int main(int argc, char* argv[]) { sqrt(12); }
Warum ist das so? Wo liegt dann bitte der Unterschied zwischen <cmath> und <math.h>? Und was bedeutet dann die Erklärung in der MSDN?
Mfg, smasher1985
-
Wird ein Fehler deines Compilers sein.
-
ich verwende den MSVC++6. Weiß irgendjemand etwas genaueres über einen solchen Fehler des Compilers?
Mfg, smasher1985
-
Der ISO-Standard fordert, daß die Symbole von <cmath> im Namensraum std liegen.
Der VC6 unterstützt das nicht, auch bei <cmath> liegen hier die Symbole im globalen Namensraum, es gibt keinen Unterschied zwischen cmath und math.h
Im VC7.x liegen die Funktionen alle in std:: - und darauf bezieht sich die Doku in der MSDN. Die geht immer vom neuesten Compiler aus.
-
@Marc++us: Vielen Dank, jetzt bin ich beruhigt ich dachte schon, ich steh megamäßig auf dem Schlauch...
Mfg, smasher1985