Mal etwas was ich bis heute nicht gescheit kapiert hab
-
Abend erstmal.
Also ich hab eine Klasse wie folgt definiert.
class CDieter
{
....
} Dieter1;So nun ist doch Dieter1 ein Objekt der Klasse CDieter. So das ganze befindet sich in einer Header Datei die ich in 2 Cpp Dateien includiert habe.
Nun bekomm ich aber immer die fehler meldung das Dieter1 doppelt definiert sei. Wie bekomm ich den weg ich weiß das die möglichkeit besteht das Objekt nicht direkt nach der Klammer der Klasse zu deklarieren. Und es dann in einer der 2 Cpp Dateien zu machen und es in der anderen als Extern. Aber ich will hald gern wissen wie des so geht.
-
versuch mal mit include-wächtern.
funktionier wie folgt:
header.h:#ifndef HEADER_H_DEF #define HEADER_H_DEF //alles möglicher code der im header stehen muss ;) #endif
ich hatte dazu auch mal ein tut geschrieben. ist aber bei einem relaunch abhanden gekommen...
-
Ich arbeite immer mit Include Wächtern.
Es wird ja nicht merfach Includiert sondern das Objekt wird 2 Mal in verschiedenen Dateien deklariert und dann heißt es das sie doppelt sind
-
ganz einfach: Definitionen (ausser inline und template) kommen nie in Header. BTW gibts nochwas, was du nicht verstanden hast: class gibts in C++, aber nicht in ANSI-C.
-
Definitionen (ausser inline und template) kommen nie in Header
Da fehlen mindestens noch Klassen-, Enumerationsdefinitionen sowie Namespacedefintionen (wobei das Wort Definition im Zusammenhang mit Namespace etwas schwierig ist).
-
Oops. Mal wieder über den Begriff Definition gestolpert.
-
ne frage am rande ... der fehler mit dem mehrfach implementiert tritt doch aber auch auf wenn header a in datei b und c implementiert wurde und b in c implementiert wurde ... wenn das richtig ist, kann das doch auch eine mögliche fehlerquelle sein ... ... mein das hätt ich ma gehabt!
-
Einmal in die *.h:
class CDieter { // ... }; extern CDieter Dieter1;
Einmal in die *.cpp:
CDieter Dieter1;
Oder alternativ:
*.hclass CDieter { // ... static CDieter Dieter1; // ... };
*.cpp
CDieter CDieter::Dieter1;