Problem mit Struktur
-
Hallo ich habe folgende Dateien:
main.cpp
#include <iostream> #include "Strukturen.h" #include "Klasse.h" using namespace std; int main() { return 0; }Strukturen.h
#ifndef StrukturenH #define StrukturenH struct PERSON { int Alter; }person; #endifKlasse.h
#ifndef KlasseH #define KlasseH class Klasse { public: void Print(); }; #endifKlasse.cpp
#include "Klasse.h" #include "Strukturen.h" void Klasse :: Print () { }Jetzt gibt mir der Compiler immer eine Warnung aus, er sagt Public Symbol _person defined in both module main.obj and Klasse.obj.
Wie macht man es richtig?
Ich wollte nicht extra in jeder Datei schreiben: PERSON person;
Deswegen hatte ich mich für:struct PERSON { int Alter; }person;Entschieden da ich jetzt nur schreiben muss person.Alter=20; ansonsten müsste ich doch z.b. immer PERSON person; person.Alter=20; schreiben.
-
Es gibt aber 2 Personen, eine in main.cpp und eine in Klasse.cpp
Richtig wäre
//Strukturen.h struct PERSON { int Alter; }; extern PERSON person; //Strukturen.cpp PERSON person;Damit gibts person nur noch einmal im Programm.
-
Jetzt gibt mir der Compiler immer eine Warnung aus, er sagt Public Symbol _person defined in both module main.obj and Klasse.obj
Das er diesbezüglich eine Warnung ausgibt bezweifle ich stark.
Ich denke eher, der Linker gibt dir einen Fehler.
Du verletzt hier ein Grundlegendes Konzept von C++: Die ODR.Um das zu lösen, deklarierst du
personmit dem storage class specifierexternnur noch im Header und definierst es in einem Source, sowie mein Vorposter es schon gezeigt hat.