Header-Files.. gegenseiter bezug .. Problem!!



  • Folgende Konstellation:

    //A.h
    
    class A{
    public:
      struct DATA_A{...};
    
    };
    
    //B.h
    
    class B{
    public:
      struct DATA_B{...}
    
    };
    

    brauch ich nur DATA_A in B und DATA_B ind A, muss ich ja A und B jeweisl in B und A includen.. aber dann gibt probleme ...



  • Was heißt denn "brauchen" genau? Möglicherweise reicht ja eine Forward Declaration.



  • ich verwende halt DATA_B in der klasse A und DATA_A in der Klasse b, wenn ich aber nun wie gestagt gegenseitg includieren gibts fehler...
    bei ner forward deklatioan kommen die selben fehler:

    error C2027: Verwendung des undefinierten Typs "A"

    P.S.: B ist schon in A included.. das gibt keine probleme... aber indludiere ich nun A noch in B bzw. will ich daten von A in B verwenden kommen dies fehler



  • Wie hast du denn die Forward Declaration gemacht? Was MFK meint ist wohl sowas:

    //A.h
    
    class B; //Das ist eine Forward Declaration für Klasse B
    
    class A{
    public:
      struct DATA_A{...};
    
    };
    
    //B.h
    
    class A; //Das ist eine Forward Declaration für Klasse A
    
    class B{
    public:
      struct DATA_B{...};
    
    };
    

    Falls die Implementierung von A und B in seperaten .cpp Dateien stattfindet, solte es so auch funktionieren.



  • Was willst du denn mit dem Design erreichen? Eventuell solltest du ja darüber nachdenken, die komplette Klassenaufteilung neu anzufangen.

    Aber mal was konstruktives: Um eine Klasse verwenden zu können, mußt du sie vorher deklariert haben (in einigen Fällen benötigt der Compiler auch die Definition). Die globale Klasse A könntest du noch mit einer Forward-Deklaration ( class A; ) für B bekannt machen, aber mit der inneren Klasse A::DATA_A wird das etwas schwieriger.
    (und wenn du versuchst, die beiden Header wechselweise zu includen, wird dir der Präprozessor einen Strich durch die Rechnung machen)



  • jepp ... das ist problem überlege mir grad ne elegantere möglichkeit.... @ CStoll

    P.S.: wenn ich jeweis ne forward deklaration mache gibts die selben probem



  • dann zeig doch mal bisschen code her!



  • hmm... wäre glaub jetzt hier zu komplex.... is viel code...


Anmelden zum Antworten