Doppelte headereinbindung verhindern?
-
Hi!
Ich weiß leider ned genau in wo das hingehört...deshalb poste ich das mal hier:Ich hab in meiner main.cpp datei zwei klassen die sich in zwei headerfiles befinden (class1.h und class2.h)
allerdings gibts zu jeder dieser headerdateien noch eine .cpp datei in der die ganzen methoden der class1 und class 2 stehen...und in den headerdateien verwende ich eine selbstgebastelte klasse (classx.h)
das dumme is nur dass wenn ich in main.cpp
class1.h class2.hreinschreibe, ich eine fehlermeldung erhalte die sagt dass die classx neudefiniert wird...
(weil sie ja schon in class1.h verwendet wird....)
zum Verständnis:classx.h--+-->class1.h--+ | +->main.cpp +-->class2.h--+gibts da einen möglichkeit dass ich das irgendwie unterbinden kann?
-
classx.h:
#if !defined(MY_CLASSX_H) #define MY_CLASSX_H ... Definitionen ... #endif
-
ich hab leider grad kein plan was ich mit
#if !defined(MY_CLASSX_H) #define MY_CLASSX_H ... Definitionen ... #endif include "Object.h"anfangen kann...
ich habs zwar versucht einzubinden aber ich weiß leider ned genau wo!
-
"... Definitionen ... " ist der komplette Inhalt Deiner Header-Datei.
Du setzt also
#if !defined(MY_CLASSX_H) #define MY_CLASSX_Han den Anfang Deiner Header-Datei und
#endifans Ende.
-
super danke!
funktioniert...
-
Und wenn du wissen willst, warum das funktioniert, schau dir in der Compiler-Doku mal die Wirkung von #ifndef und #define an. (oder such nach "Include-Guard")
-
Ich persönlich bevorzuge
#pragma onceda dies die Build-Zeiten verkürzen...
-
Jochen Kalmbach schrieb:
Ich persönlich bevorzuge
#pragma onceda dies die Build-Zeiten verkürzen...
nur mit ms compilern

-
Jochen Kalmbach schrieb:
Ich persönlich bevorzuge
#pragma onceda dies die Build-Zeiten verkürzen...
Was allerdings keine allgemeine Lösung darstellt. Man kann es trotzdem zusätzlich an den Anfang der Datei schreiben. Compiler, die das verstehen, nutzen es. Andere ignorieren es.
-