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 Bezeichner

    Sowas 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


Anmelden zum Antworten