Syntax Funktionsdeklaration ( Anfängerfragen )



  • Hallo, ich schreibe grade ein kleines Projekte in C++ und habe dafür mehrere .cpp und .h Dateien angelegt.
    Es ist mir dank der beschaffenheit des Gesamtprojektes nicht möglich, den Code zu kompilieren und meine Fragen per "Try and Error" zu beantworten.
    Ich hoffe ihr nehm es mir nicht übel so leichte Fragen zu stellen, denn google hat mir keine verständliche Antwort geliefert. Nun zu meinen Fragen:

    1. Muss in den Funktionsdeklarationen im Header Name und/oder Datentyp der Übergebenen Parameter deklariert werden? Wie muss es schließlich in der .cpp aussehen?

    .h
    void funktion1(int a,intb)

    .cpp
    void funktion(a,b){do something;} ???

    2. Sollte ich ggf mit Klassen programmieren, auch wenn keine Objekte Instanziiert werden?

    .h
    int a=0;

    funktion1.cpp
    a=3;

    funktion2.cpp
    if(a==3){do something}

    main{funktion1;funktion2;} Wird "do something" ausgeführt?



  • Muss in den Funktionsdeklarationen im Header Name und/oder Datentyp der Übergebenen Parameter deklariert werden? Wie muss es schließlich in der .cpp aussehen?

    Im Header stehen die Prototypen, d.h Rückgabetyp und Datentyp der Argumente deren Bezeichner du durch die .cpp Datei spezifizieren kannst. Dir muss klar werden, dass es zu (fast) jeder Header Datei eine zugehörige .cpp Datei gibt, die den Zweck der Implementierung hat. Deshalb:

    void funktion(a,b){do something;}

    Schwachsinn. Die Datentypen müssen in beiden Dateien vorliegen.

    Sollte ich ggf mit Klassen programmieren, auch wenn keine Objekte Instanziiert werden?

    Insofern dir pure virtuelle Klassen noch nicht bekannt sind, nein.

    3. Nö. Weil du erstens den Header nicht eingebunden hast und dir zweitens eine Fehlermeldung hinterher geschmissen wird wenn du das mit diesem Quellcode tun wirst.



  • humanica schrieb:

    Es ist mir dank der beschaffenheit des Gesamtprojektes nicht möglich, den Code zu kompilieren und meine Fragen per "Try and Error" zu beantworten.

    Man kann ja auch nur ein Projekt anlegen ...



  • humanica schrieb:

    .h
    int a=0;

    funktion1.cpp
    a=3;

    funktion2.cpp
    if(a==3){do something}

    main{funktion1;funktion2;} Wird "do something" ausgeführt?

    Das hängt davon ab, ob der Linker die (mindestens) zwei globalen Variablen mit dem Namen a, zusammenfasst.

    Darum: Keine Variablendefinitionen im Header!
    Diese gehört in eine cpp Datei.
    In die andere (bzw. in den Header) gehört dann eine Deklaration mit extern.

    .h
    extern int a;

    funktion1.cpp
    #include .h
    a=3;

    funktion2.cpp
    int a=0;
    if(a==3){do something}


Log in to reply