Verwendung von selben Konstanten in verschiedenen Klassen
-
Ich habe folgendes Problem mit der Verwendung von Konstanten in mehreren Klassen.
Quelltext:
konstanten.h
------------//--------------------------------------------------------------------------- #ifndef KonstantenH #define KonstantenH //--------------------------------------------------------------------------- const char* Zeichenkette = "TEST"; //--------------------------------------------------------------------------- #endif
Binde ich nun in einer neuen Unit eine Klasse ein, welche diese Konstanten benutzen kriege ich folgende Warnung:
[Linker Warnung] Public symbol '_Zeichenkette' defined in both module C:\PROJEKT\CBUILDER-SAMPLES\UNIT1.OBJ and C:\PROJEKT\CBUILDER-SAMPLES\XXX.OBJ.
Wie kann man das unterbinden?
-
Indem du dir ein vernünftiges Tutorial oder Anfängerbuch zulegst. Auch wenn du
schon ausführliche Erfahrungen in Delphi/Pascal hast, bedeutet das nicht, das
du automatisch C++ beherrschst. Das man Klassen, Functionen, Variablen und
Konstanten nur einmal definieren darf sollte in jedem Lehrbuch nach
spätestens 20 Seiten erklärt werden.mfg JJ
-
Das man Klassen, Functionen, Variablen und
Konstanten nur einmal definieren darf sollte in jedem Lehrbuch nach
spätestens 20 Seiten erklärt werden.häh..? Durch die Include-Guards sollte doch sichergestellt sein, dass das nur einmal definiert wird, oder nicht?
Mfg, smasher1985
-
Wenn es sich um die gleiche "Übersetzungseinheit" handelt schon. Bei XXX.cpp und
UNIT1.cpp handelt es sich um unterschiedliche Einheiten.z.B.
XXX.cpp
#include "XXX.h" #include "konstanten.h" void XXX::x() { ... } ...
UNIT1.cpp
#include "UNIT1.h #include "konstanten.h" void UNIT1::y() { ... } ...
In diesem Fall wird zweimal die gleiche Konstante definiert.
mfg JJ
-
gut also die Warnung tritt auf, wenn ich mehrere Klassen (Xxx, Yyy) einbinde, die diese Konstanten.h benutzen. Also die konstanten.h ist in der Unit1.Cpp nicht include.
Aber, und hast recht, das gleiche Problem tritt ja ebenfalls auf, wenn mehrerer Klassen diese Konstanten.h verwenden und ich die Klassen in der Unit1.cpp verwende.Ich möchte jedoch in den verschiedenen Klassen auf diese Konstanten zurückgreifen und diese nicht in der Unit1.cpp allein einbinden, also nicht unbedingt abhängig von dieser Unit1 machen, sondern nur von den anderen Klassen.
Gibt es den hier eine Möglichkeit dies so umzusetzen?
-
Über Header-Datei geht das in keinem Fall sinnvoll. Du könntest beispielsweise
ne Klassr definieren die all deine Konstanten enthält und diese als Static-Member
zugreifbar machen. Auf Anhieb fällt mir nicht besseres ein.mfg JJ