1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Typ A innerhalb Typ B verwenden, und umgekehrt ...

  • Blixa Barscheck
  • 11. Dezember 2006 um 14:02
  • Unerledigt
  • Blixa Barscheck
    12
    Blixa Barscheck
    Mitglied
    Reaktionen
    11
    Punkte
    1.406
    Beiträge
    229
    • 11. Dezember 2006 um 14:02
    • #1

    SO funktioniert es schon einmal nicht:

    C
    #ifndef __A_H__
    #define __A_H__
    
    
    #include "B.h"
    
    
    class A{
    
    
    public:
    
    
        int x;
        B* b;
    };
    
    
    #endif
    Alles anzeigen
    C
    #ifndef __B_H__
    #define __B_H__
    
    
    #include "A.h"
    
    
    class B{
    
    
    public:
    
    
        int x;
        A* a;
    };
    
    
    #endif
    Alles anzeigen
    C
    #include "A.h"
    #include "B.h"
    
    
    int main(){
    
    
        A* a = new A();
        B* b = new B();
    
    
        a->b = b;
        a->x = 1;
    
        b->a = a;
        b->x = 2;
    
    
        cout << a->x << "  " << a->b->x << "  " << b->x << "  " << b->a->x << endl;
    
    
        return 0;
    
    
    }
    Alles anzeigen

    "Von der Gewalt, die alle Wesen bindet, befreit der Mensch sich, der sich überwindet." > Learn more ...

  • tivolo
    5
    tivolo
    Mitglied
    Punkte
    240
    Beiträge
    48
    • 11. Dezember 2006 um 14:28
    • #2

    du hast cyclic dependencies drin, das kann nicht funktionieren. du musst eine der beiden klassen in einem der beiden header forward deklarieren (z.b. mit class A;). google mal nach "forward declaration".

    besser wäre es aber wahrscheinlich, dein design nochmal zu überdenken. in 95% aller fälle treten solche abhängigkeiten nicht auf.


    -tiv

    Stefan Reinalter
    Lead Programmer @ Sproing Interactive

  • sauzachn
    17
    sauzachn
    Mitglied
    Reaktionen
    51
    Punkte
    3.101
    Beiträge
    606
    • 12. Dezember 2006 um 13:04
    • #3
    Zitat von tivolo

    du hast cyclic dependencies drin, das kann nicht funktionieren. du musst eine der beiden klassen in einem der beiden header forward deklarieren (z.b. mit class A;). google mal nach "forward declaration".


    Macht er aber in dem Fall eh - durch Einbindung der Headerdateien. Nur wenn A.h resp. B.h _nicht_ eingebunden werden sollen, muss man "class X" forward deklarieren.

    Wie immer bitte ich um ein vollständiges Programm, da mir zumindest auf den ersten Blick in der main() Funktion gleich mal Dinge auffallen, die sicher nicht compilieren können.

    Und die Fehlermeldung wäre auch interessant!

    Dipper dipper dii dipper dii dipper dii duuu

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 12. Dezember 2006 um 13:10
    • #4
    Zitat von sauzachn

    Macht er aber in dem Fall eh - durch Einbindung der Headerdateien. Nur wenn A.h resp. B.h _nicht_ eingebunden werden sollen, muss man "class X" forward deklarieren.


    Die Einbindung ändert nichts daran, daß es zyklische Abhängigkeiten zwischen den Klassen gibt. Die Deklaration von B kommt vor jeglicher Deklaration von A, also gibts bei der Deklaration "A* a;" einen Fehler.

    Zitat

    Und die Fehlermeldung wäre auch interessant!


    g++ liefert da, wie leider oft bei unbekannten Typen, nur einen syntax error ohne nähere Details.

    *plantsch*

  • Blixa Barscheck
    12
    Blixa Barscheck
    Mitglied
    Reaktionen
    11
    Punkte
    1.406
    Beiträge
    229
    • 13. Dezember 2006 um 12:20
    • #5
    Zitat von tivolo

    du musst eine der beiden klassen in einem der beiden header forward deklarieren (z.b. mit class A;). google mal nach "forward declaration".


    Fuktioniert!
    thx!

    Code
    #ifndef __A_H__
    #define __A_H__
    
    
    class B;
    
    
    class A{
    
    
    public:
    
    
        int x;
        B* b;
    };
    
    
    #endif
    Alles anzeigen
    C
    #ifndef __B_H__
    #define __B_H__
    
    
    #include "A.h"
    
    
    class B{
    
    
    public:
    
    
        int x;
        A* a;
    };
    
    
    #endif
    Alles anzeigen

    "Von der Gewalt, die alle Wesen bindet, befreit der Mensch sich, der sich überwindet." > Learn more ...

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung