include einer .h in einer headerdatei
-
Hi,
ich habe eine Fehlermeldung die wie folgt aussieht.
Eigen.obj : error LNK2005: "int (* superfeld)[10][10]" (?superfeld@@3PAY199HA) bereits in CObjectFit.obj definiert
Matrix3.obj : error LNK2005: "int (* superfeld)[10][10]" (?superfeld@@3PAY199HA) bereits in CObjectFit.obj definiert
....Zur Erklärung, also ich habe eine a.h-Datei, in der ich alle Klassendefinitionen untergebracht habe. Nun wollte ich eine b.h-Datei anlegen, in der ich mir kleine Hilfsfunktionen definiere, die alles Klassen benutzen dürfen.
Die obige Fehlermeldung erhalte ich beim compilieren, wenn ich versuche die b.h in meiner a.h einzubinden.Die a.h wird in meinen *.cpp Dateien includiert (schönes Wort).
Ich habe es auch schon versucht, die b.h nur in den *.cpp zu includieren und so funktioniert es.
Nun endlich meine Frage: Kann ich die Fehlermeldung durch ein #ifdef ... vermeiden oder muß ich den zweiten Weg gehn?
-
Was ist denn der zweite Weg?
Nun endlich meine Frage: Kann ich die Fehlermeldung durch ein #ifdef ... vermeiden oder muß ich den zweiten Weg gehn?
Wieso probierst du das denn nicht einfach aus? Geht doch schneller, als hier auf ne Antwort zu warten?! Ich denke schon, dass sich das Problem dadurch lösen würde....
-
du hast in der headerdatei anscheinend eine definition stehen, von superfeld, die dort nicht hingehört.
-
Nope, mit include-guards kannst du nur Compilerfehler verhindern. Das sind aber Linkerfehler. Die Lösung ist simpel: In Headerdateien gehören keine Definitionen von extern sichtbaren Funktionen (ausgenommen templates oder inline) oder Variablen. Deklarationen aller Art sowie Klassendefinitionen und wie gesagt inline-Funktionen und Templates snd OK. Dann kann der Header in verschiedenen Übersetzungseinheiten eingebunden werden, ohne dass es Konflikte durch mehrfache Definitionen gibt.
-
Danke