multiple definition und Konstanten
-
Hallo Leute
eins vorweg: ich hab nach der Fehlermeldung gesucht, aber die Suchergebnisse haben mich nicht weitergebracht.
Ich hab ein Headerfile was praktisch alle nötigen Konstanten enthält.
// Logikknoten unsigned char LogicalBegin = 240; unsigned char LogicalEnd = 242; const unsigned char LOGICALNODE_AND= 240; const unsigned char LOGICALNODE_OR= 241; const unsigned char LOGICALNODE_XOR= 242; // Operatorknote unsigned char OperatorBegin = 250; unsigned char OperatorEnd = 253; const unsigned char OPERATORNODE_SMALLER= 250; const unsigned char OPERATORNODE_BIGGER= 251; const unsigned char OPERATORNODE_CROSSINGUP= 252; const unsigned char OPERATORNODE_CROSSINGDOWN= 253;Dieses Headerfile wird von fast allen Klassen benötigt.
D.h. es wird auch überall included.Als Fehler bekomm ich jetzt folgendes:
....multiple definition of
LogicalBegin' ....first defined here ....multiple definition ofLogicalEnd'
....first defined here
....multiple definition ofOperatorBegin' ....first defined here ....multiple definition ofOperatorEnd'Er bemängelt nur diese vier constants. In der Headerdatei sind noch mehr, die nicht bemängelt werden.
Irgendwas ist anders... Jemand ne Idee?
-
Sind Include-Guards drin? 4 Der Variablen sich nicht konstant.
PS: Die Großbuchstaben-Schreibweise würde ich nur bei Makros benutzen, nicht aber bei typensicheren Konstanten.
-
mist... ich hab das const davor vergessen... ich bin ja so dämlich...
Problem gelöst

PS: include guards sind natürlich drin

-
Diese 4 Dinger sind keine "Konstanten". Es fehlt das const.
Wenn Du mehr Details wissen willst, suche mal nach Beiträgen, die "Bindung", "Deklaration" und "Definition" erklären. Davon gibt's hier mindestens zwei (von mir)

Du solltest in der Richtung auf jeden Fall nachforschen. Die Kurzfassung für deinen spezifischen Fall geht so: Variablen, die Du auf Namensraumebene als const (und nicht extern) deklarierst, besitzen "interne Bindung" und beziehen sich damit nie auf Variablen von anderen Übersetzungseinheiten. --> Der Linker hat dann auch nichts zu meckern.
Gruß,
SP