"config" Datei mit Variablen in mehrere Dateien includen?!



  • Morgen, ich habe mir eine config.h geschrieben, die wie folgt aussieht:

    #ifndef CONFIG_H
    #define CONFIG_H
    
    int star_screen = 1;
    int star_i = 0;
    
    #endif
    

    Wenn ich diese jetzt über

    #include "config.h"
    

    in nur einer Klassen.cpp Datei includiere, funktioniert das wunderbar, aber sobald es mehr sind, wird ein ...

    multiple definition of `star_screen'
    multiple definition of `star_i'
    

    ... angemeckert. Wie lößt man dieses Problem am geschicktesten? Irgendwelche Vorschläge? Vielleicht bin ich Struktur-technisch auch auf dem Holzweg, und man kann das viel geschickter machen 😉

    Lg
    Dennis



  • Du hast zwei Möglichkeiten, jede mit unterschiedlichen Ergebnissen:

    1. du definierst die Variablen als static int star_screen = 1;
      dann bekommt jede Übersetzungseinheit eine eigene Kopie der Variablen (allerdings mit dem Nachteil, daß diese unabhängig voneinander sind und sich so nicht gegenseitig beeinflussen - die Lösung macht also bestenfalls bei Konstanten Sinn)
    2. du deklarierst die Variablen im Header nur ( extern int star_screen = 1; ) und lagerst die eigentlichen Definitionen in eine Config.cpp aus, die du dann auch in dein Projekt einbinden mußt


  • Hi CStoll,
    ich habe jetzt folgendes zusammengebastelt:

    config.h

    #ifndef CONFIG_H
    #define CONFIG_H
    
    extern int star_screen;
    extern int star_i;
    
    #endif
    

    config.cpp

    #include "config.h"
    
    star_screen = 1;
    star_i = 9;
    

    So, und diese Variablen lade ich über

    #include "config.cpp"
    

    In meine anderen Klassen, wo ich diese benötige. Jedoch gibt er mir folgende Fehlermeldung aus:

    c:/classTest/source/config.cpp:3: error: expected constructor, destructor, or type conversion before '=' token
    c:/classTest/source/config.cpp:4: error: expected constructor, destructor, or type conversion before '=' token
    

    Ich dachte ich habe die beiden Variablen schon in der config.h deklariert, und somit kann ich diese in der config.cpp einfach schreiben (setzt vorraus, dass die config.h natürlich eingebunden ist).

    Was mache ich noch falsch?

    Danke jedoch schonmal für deine Hilfe!!!

    ps.:
    Wenn ich in der config.h folgendes schreibe:

    #ifndef CONFIG_H
    #define CONFIG_H
    
    extern int star_screen = 8;
    extern int star_i = 1;
    
    #endif
    

    meckert er dieses hier:

    c:/classTest/source/config.h:5: warning: 'star_screen' initialized and declared 'extern'
    c:/classTest/source/config.h:6: warning: 'star_i' initialized and declared 'extern'
    c:/classTest/source/config.cpp:3: error: expected constructor, destructor, or type conversion before '=' token
    c:/classTest/source/config.cpp:4: error: expected constructor, destructor, or type conversion before '=' token
    

    Habe ich es doch nicht verstanden?! 😞

    Lg
    Dennis



  • Erstens: In der CPP kannst du keine Anweisungen auf globaler Ebene schreiben, sondern nur Deklarationen und Definitionen (auf Deutsch - dort fehlt das 'int' vor den beiden Variablen).

    Zweitens: Du sollst nicht die Quelldatei includen (damit landest du sofort wieder bei deinem ursprünglichen Problem), sondern den Header. Die dazugehörige Quelldatei gibst du dem Compiler zusammen mit deinen übrigen Klassendateien mit.



  • Vielen Dank!!!
    Jetzt funktioniert es!

    Gruß
    Dennis


Anmelden zum Antworten