"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; #endifWenn 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:
- 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) - 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
- du definierst die Variablen als
-
Hi CStoll,
ich habe jetzt folgendes zusammengebastelt:config.h
#ifndef CONFIG_H #define CONFIG_H extern int star_screen; extern int star_i; #endifconfig.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 '=' tokenIch 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; #endifmeckert 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 '=' tokenHabe 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