Was gehört wohin?



  • GAME 
       |_MAIN 
       |    |_main.cpp 
       |    |_main.h 
       | 
       |_ENGINE 
              |_UTIL 
              |    |_util.cpp 
              |    |_util.h 
              | 
              |_BASIS 
                    |_graphic.cpp 
                    |_graphic.h
    

    Weil meine Projekte immer im Kaos enden. Habe ich mir vorgenommen mein Projekt zu unterteilen.

    Durch diese Unterteilung habe ich mehr Problem bekommen. Funktionen werden nicht erkannt. inline Funktionen gehen nicht. Und globale Variable sind nicht mehr global 😞

    Das seltsame ist das einige Funktionen den Fehler "Nichtaufgelöstes externes Symbol..." erzeugen. Eine andere Funktion in der selben cpp-Datei wird nicht als Fehler erkannt.

    -Was gehört jetzt in die Header-,CPP Dateien.
    -Was muss ich beachten bei inlien-Funktionen.
    -Was beachten bei globalen Variablen.
    -Was beachten bei Funktionen.



  • In die Header gehören nur Deklarationen, kein Quellcode. Die Definitionen der Funktionen und Klassen kommen in die cpp-Dateien.
    Ausnahme: inline-Funktionen darfst du auch im Header ausschreiben. Dazu musst du aber vor die Funktion inline schreiben.

    Globale Variablen müssen in einem Header deklariert werden, allerdings als extern (schreib einfach extern davor). In irgendeiner (aber nur einer) cpp-Datei definierst du die Variable dann noch. Dazu schreibst du die Variablendeklaration nochmal hin, diesmal aber ohne extern.

    Bsp.-Header:

    // include-guards:
    #ifndef MY_HEADER_H
    #define MY_HEADER_H
    
    // Eine ganz normale Funktion
    int foo();
    
    // eine inline-Funktion
    inline int foo2() { return 42; };
    
    // eine globale Variable
    extern int global;
    
    #endif
    

    Die passende cpp-Datei:

    #include "myheader.h"
    
    // Die Definition der globalen Variable (darf nur in einer einzigen cpp-Datei stehen!)
    int global;
    
    int foo()
    {
      return 42;
    }
    

    Bei Klassen ist das in etwa genauso.

    Vergiss das mit den globalen Variablen aber am besten ganz schnell wieder. 🙂
    Globale Variablen sind böse.



  • Ich habs jetzt so gemacht wie gesagt. Es funktioniert auch alles.

    Bis heute.

    Ich habe ein Funktion erstellt. in einer cpp-Datei.

    cpp-File

    #include"Header.h"
    
    int global;
    
    void Funktion(int x);
    {
       global=x;
       //Dies und das
    }
    

    Headefile

    #ifndef HEADER_H
    #define HEADER_H
    
    extern int global;
    void Funktion(int);
    
    #endif
    

    Jetzt will ich die Funktion von einer anderen cpp-Datei aus verwenden.

    include "Header.h"
    
    int main()
    {
       void Funktion(10);
       return 0;
    }
    

    Geht aber nicht 😞

    extern int global; <- Der Compiler ist der Meinug das da ein ';' fehlt?????



  • void Funktion(10); ?

    das ist falsch. -> Funktion(10);



  • Jürgen D. schrieb:

    extern int global; <- Der Compiler ist der Meinug das da ein ';' fehlt?????

    Dann liegt der Fehler (je nach Compiler) ziemlich sicher nicht in dieser Zeile. Du hast davor ein ; o.a. vergessen.


Anmelden zum Antworten