Problem beim Kompilieren



  • Hallihallo erstmal! Ich bin ein kompletter Anfänger in c++ und begann daher mit einem Tutorium aus dem Internet, meine Kenntnisse zu erweitern. Ein Beispielcode aus dem Tutorium funktioniert jedoch nicht und ich weiß nicht mehr weiter. Sinn ist, das Volumen eines Kegels zu berechnen, mit den zwei Variablen Höhe und Radius. PI ist als Konstante definiert. Hier der Code:

    #include <iostream>

    using namespace std;

    void main()
    {
    float radius;
    float hoehe;
    cout<<"Bitte geben Sie den Radius ein: ";
    cin>>radius;
    cout<<"Bitte geben Sie die Höhe ein: ";
    cin>>hoehe;
    const float PI=3.14f;
    float grundflaeche=PI*radius*radius;
    float volumen=(grundflaeche*hoehe)/3;
    cout<<"Das Volumen betraegt: "<<volumen<<endl;
    return 0();
    };

    Als Fehlermeldung beim Versuch ihn zu kompilieren, bekam ich dann das hier:

    4.cpp
    .\4.cpp(17) : warning C4353: Nicht dem Standard entsprechende Erweiterung: Konstante 0 als Funktionsausdruck. Verwenden Sie stattdessen die __noop-Funktion systemintern.
    .\4.cpp(17) : error C2562: 'main': 'void'-Funktion gibt einen Wert zurück
    .\4.cpp(5): Siehe Deklaration von 'main'

    -Kann mir da jemand helfen?? Also ich weiß schonmal das der Fehler an der Return-Anweisung am Ende liegt - Aber was genau?

    Vielen vielen Dank im Voraus!!

    Achja, ich verwende die MS Visual c++ 2005 Express Edition!



  • #include <iostream>
    
    const float PI = 3.14f;
    
    int main() // int main !!!
    {
        std::cout<<"Bitte geben Sie den Radius ein: " << std::flush;
        float fRadius = 0.0f;
        std::cin >> fRadius;
        std::cout << "Bitte geben Sie die Höhe ein: " << std::flush;
        float fHoehe = 0.0f;
        std::cin >> fHoehe;
        std::cout << "Das Volumen betraegt: " << (((PI * fRadius * fRadius) * fHoehe) / 3) << std::endl;
        return 0; // nicht 0() ...
    }
    

    ?



  • Jetzt funktionierts, danke!!

    Um näher drauf einzugehen:

    Kann ich void main nicht nehmen, weil mit dem code mehr getan wird, als nur eine Ausgabe fabriziert? Hab ein bißchen Kenntnisse in java, da war das glaub ich so, dass man void nur nimmt, wenn zum Beispiel nur eine Textausgabe erfolgt?

    Wieso ist "using namespace std" nun weg? Wurde das lediglich ersetzt durch die std::flush? Und was heißt das genau?

    Auch das std::endl - warum wird das so geschrieben bzw. was bewirkt das?

    Bei all den Fehlern frag ich mich jetzt, ob das Tutorial überhaupt sinnvoll ist!? 😞 Volkards c++ Kurs ist das

    P.S.: Ich weiß das sind viele Fragen, aber will da endlich durchsteigen 🙂



  • Tomo83 schrieb:

    Kann ich void main nicht nehmen, weil mit dem code mehr getan wird, als nur eine Ausgabe fabriziert? Hab ein bißchen Kenntnisse in java, da war das glaub ich so, dass man void nur nimmt, wenn zum Beispiel nur eine Textausgabe erfolgt?

    Theoretisch kennzeichnet "void irgendwas()", daß die Funktion nichts zurückgeben wird (aber dann mußt du sie auch mit einer leeren return-Anweisung bzw. automatisch am Funktionsende verlassen).
    ABER: Laut C/C++ Standard ist definiert, daß main() einen int zurückgeben muß (der wird vom BS als Fehlercode entgegengenommen).

    Wieso ist "using namespace std" nun weg? Wurde das lediglich ersetzt durch die std::flush? Und was heißt das genau?

    Es gibt Leute, die mögen kein 'using' - und die Alternative dazu ist es, alle std::-Namen explizit so zu kennzeichnen. (btw, std::flush bewirkt, daß der Ausgabepuffer an das Betriebssystem weitergegeben wird - an der Stelle eigentlich unnötig, weil cin und cout per Default gekoppelt sind)

    Auch das std::endl - warum wird das so geschrieben bzw. was bewirkt das?

    das schreibt erst ein Newline und führt dann ebenfalls einen flush aus.


Anmelden zum Antworten