klassenobjekt extern = Fehler
-
Hallo..
Ich hab ne Klasse mit Header erstellt. Diesen binde ich in meine Hauptdatei ein und erstelle dann ein Objekt mit:
tolleKlasse objekt;
Das geht einwandrfrei, nun will ich das Objekt auch in anderen Dateien nutzen, also schreib ich in den Hauptdateiheader
extern tolleKlasse objekt;
Leider gibts da nen "Fehler in der Deklarationssynthax"
Mit meine ganzen anderen Typen mach ich das aber auch immer so und es geht, muss man bei Objekten was bestimmtes beachten?
-
Hallo,
kann es sein, dass deine extern-Deklaration *vor* der Klassendefinition auftaucht?So sollte es gehen
// TolleKlasse.h #ifndef TOLLE_KLASSE_H__INCLUDED #define TOLLE_KLASSE_H__INCLUDED class TolleKlasse { public: void foo(); // ... }; extern TolleKlasse objekt; // deklaration #endif // TolleKlasse.cpp #include "TolleKlasse.h" TolleKlasse objekt; // definition // ... // main.cpp #include "TolleKlasse.h" int main() { objekt.foo(); }
Aber bist du wirklich sicher, dass es eine globale Variable sein muss?
-
hmm, vieleicht hab ich ja c++ mit vielen Dateien noch nicht richtig verstanden, aber ich packe meistens alle mögliche externen Sachen in einen Header, den ich dann includieren kann, bei Variablen geht das bis jetzt ja auch:
// TolleKlasse.h #ifndef TOLLE_KLASSE_H__INCLUDED #define TOLLE_KLASSE_H__INCLUDED class TolleKlasse { public: void foo(); // ... }; extern TolleKlasse objekt; // deklaration #endif // TolleKlasse.cpp #include "TolleKlasse.h" // definition // ... // main.cpp #include "main.h" TolleKlasse objekt; float andereVariable; int main() { //blabla } // main.h #ifndef blabla #define blabla #include "TolleKlasse.h" extern TolleKlasse objekt; extern float andereVariable; //andereDatei.cpp #include "main.h" //irgendwelche Funktionen oder so andereVariable++; objekt.foo();
also dieses Beispiel funktioniert dann nicht...
So wie dus machst gehts natürlich auch, aber wenn ich dann irgendwas dynamisch erstellen will, würd ichs dann doch lieber in der Main oder so machen.
-
also das
extern TolleKlasse objekt; // deklaration
im TolleKlasse header kommt dann natürlich raus
-
Hallo,
für die extern-Deklaration reicht eine forward-Deklaration der Klasse. Dort wo du das Objekt *definierst* bzw. es verwendest muss die Klassendefinition bekannt sein. Wenn du dich daran hälst, darf kein C++ Compiler böse werde// irgendwas.h class TolleKlasse; extern TolleKlasse objekt; // TolleKlasse.h class TolleKlasse { // ... }; // irgendwo.cpp #include "TolleKlasse.h" // Wichtig. Hier brauchen wir die Klassendefinition TolleKlasse objekt; // ganz_wo_anders.cpp #include "TolleKlasse.h" // Wichtig. Hier brauchen wir die Klassendefinition... #include "irgendwas.h" // ...und die Deklaration von objekt int main() { objekt.Foo(); }