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;
    
    #endif
    

    Klasse.h

    #ifndef KlasseH
    #define KlasseH
    
    class Klasse
    {
    public:
           void Print();
    
    };
    #endif
    

    Klasse.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 person mit dem storage class specifier extern nur noch im Header und definierst es in einem Source, sowie mein Vorposter es schon gezeigt hat.


Anmelden zum Antworten