1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • 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
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • Blixa Barscheck
    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
  • tivolo
    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

  • sauzachn
    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!

  • Plantschkuh!
    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.

  • Blixa Barscheck
    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
  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

  1. Datenschutzerklärung
  2. Impressum