none
gegenseitige objektverweise in klassen RRS feed

  • Frage

  • hallo!

    ich weiß nciht ob der titel günstig gewählt ist. folgende zeilen sollten das problem aber gut darstellen:

    A.h
    pragma once
    
    public ref class A
    {
    public:
    	A(void) { }
    };
    
    

    B.h

    #pragma once
    
    #include "A.h"
    
    public ref class B
    {
    public:
    	A^ a;
    	B(void) { this->a = gcnew A(); }
    };
    


    bis hier hin ist alles wunderbar.

    nun möchte ich aber in klasse A auch gern ein objekt der klasse B halten und erweitere A.h wie folgt:

    A.h
    #pragma once
    
    #include "B.h"
    
    public ref class A
    {
    public:
    	B^ b;
    	A(void)	{ this->b = gcnew B(); }
    };
    

    ab hier mag der compiler nicht mehr. was ist das problem?
    • Bearbeitet irieill Dienstag, 5. Januar 2010 15:07 naja muß jetz so reichen... keine lust mehr.
    Dienstag, 5. Januar 2010 15:00

Antworten

  • Das ist ja auch ein ziemlich unmöglich oder?

    Du erzeugst ein Objekt A, dieses Objekt erzeugt nun ein Object B intern, dieses wiederum erzeugt ein Object A welches wiederum ein Object B erzeugt.
    Wie soll das gehen.

    Ansonsten kannst Du sicherlich eine Referenz intern halten, aber in keinem Fall die Objekte im Konstruktor erzeugen.

    Du benötigst evtl. eine Voraus Deklaration:

    public ref class A;
    public ref class B;

    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Dienstag, 5. Januar 2010 16:30
    Moderator

Alle Antworten

  • Das ist ja auch ein ziemlich unmöglich oder?

    Du erzeugst ein Objekt A, dieses Objekt erzeugt nun ein Object B intern, dieses wiederum erzeugt ein Object A welches wiederum ein Object B erzeugt.
    Wie soll das gehen.

    Ansonsten kannst Du sicherlich eine Referenz intern halten, aber in keinem Fall die Objekte im Konstruktor erzeugen.

    Du benötigst evtl. eine Voraus Deklaration:

    public ref class A;
    public ref class B;

    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Dienstag, 5. Januar 2010 16:30
    Moderator
  • Du benötigst evtl. eine Voraus Deklaration:

    public
     ref class
     A;
    public
     ref class
     B;
    

    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    danke... das war das problem!
    Dienstag, 5. Januar 2010 17:04
  • Du solltest Dir aber angewöhnen, dass Du die Implementierung in der cpp-Datei machst!
    Sonst wirst Du noch mehr Probleme bekommen...
    Jochen Kalmbach (MVP VC++)
    Dienstag, 5. Januar 2010 18:42