Merkwürdiger Fehler, der sich meinen Behebungsversuchen arglistig widersetzt
-
Implementationen haben in den seltensten Faellen was im Header zu suchen. Dadurch existiert in jeder Compilierungseinheit, dass diesen Header benutzt, eine Implementation dieser Funktion. Obwohl die Implementationen gleich sind, weiss der Linker/Compiler nicht, welche er benutzen soll.
-
@knivil: Die Idee bzw. Vorgabe, die Funktionen im Header anzulegen kommt leider nicht von mir - da hab' ich keinen Einfluß drauf. Auf den ersten Blick könnte man Ihre Antwort in die Kategorie "Besserwisser" einordnen, und auf den zweiten Blick ist sie auch nicht hilfreicher ...
@Belli: Was ist ein Header-Guard?
-
Sorry, knivil ... mein Browser hat zunächst nur der ersten Satz Ihres Beitrages angezeigt. Ich war etwas voreilig - ich bitte, dies zu entschuldigen.
-
Wenn das so bleiben soll, darfst du diesen Header eben nur in einer einzigen .cpp-Datei einbinden.
-
@knivil: Das Header-File wird nur von einem .cc-File benutzt, daher ist dies als Ursache des Problems ausgeschlossen.
-
#ifndef ALREADY_INCLUDED #define ALREADY_INCLUDED // hier deine Deklarationen #endifSinn und Zweck ist es dabei, dass der Compiler den Inhalt nur einmal zu Gesicht bekommt, wenn mehrere Dateien diesen Header einbinden. Schau dir einmal die Standardbibiothek an, alle Dateien haben einen solchen Include-Wächter. Damit kann man also
#include <vector>
#include <vector>
schreiben, ohne dass der Compiler meckert. Der Name sollte natürlich anders lauten, irgendetwas mit Bezug auf den Datei/Klassennamen.
Wenn du allerdings die Heder-Datei nicht verändern kannst, dann darfst du sie auch nur einmal einbinden.
-
Header-Guards sind schon vorhanden (wusste nur nicht, dass das so heißt). Das hilft leider nicht.
-
HolgerK1981+ schrieb:
@knivil: Das Header-File wird nur von einem .cc-File benutzt, daher ist dies als Ursache des Problems ausgeschlossen.
Auch von genau einem?
Ansonsten ist wahrscheinlich die Ursache woanders zu finden.
-
Man könnte auch alles inline machen, in Kombination mit Headerguards sollte dies das Problem beheben. static Variablen in den Funktionen wurden dann natürlich nicht mehr wie geplant funktionieren.
Das alles ist am Herumgedoktere an den Symptomen, das wirkliche Problem ist dies:
HolgerK1981+ schrieb:
@knivil: Die Idee bzw. Vorgabe, die Funktionen im Header anzulegen kommt leider nicht von mir - da hab' ich keinen Einfluß drauf.
Wenn geballte Inkompetenz mit der Macht verbunden ist, diese auch durchzusetzen, dann kann man einfach nicht mehr helfen. Erst wenn dieses Problem gelöst ist, kann man eine zufriedenstellende Lösung finden (und diese Lösung ist auch ganz einfach: Das was man normalerweise macht).
-
"Inline" hat geholfen.
Wenn geballte Inkompetenz mit der Macht verbunden ist, diese auch durchzusetzen, dann kann man einfach nicht mehr helfen. Erst wenn dieses Problem gelöst ist, kann man eine zufriedenstellende Lösung finden (und diese Lösung ist auch ganz einfach: Das was man normalerweise macht).
Oje ... das klingt ja sehr revolutionär ... ich bin schon zufrieden, wenn's einfach nur klappt. Schön muss es nicht sein ...