Referenz Member initialisieren?

jccTeq

Erfahrenes Mitglied
Hallo,

blöde C++ Frage:

ich hab in einer Klasse als Member dieser Klasse eine Referenz auf ein Objekt außerhalb der Klasse. Der Compiler (g++ 3.x) sagt mir nun immer, daß diese Referenz nicht initialisiert ist. Wie initialisiere ich die Referenz?

Code:
classe CMyClass
{
    private:
        CMyOtherClass& myReference;
};

... und am Anfang des Constructors sagt mir der Compiler immer

Code:
error: uninitialized reference member `CMyClass::CMyOtherClass'

Wie erledige ich diesen Fehler?
Danke

Gruß,
Hendrik
 
NULL ist ein Zeiger auf 0x00000000. Damit kann eine Referenz nix anfangen. Sie muss auf das ihr zugewiesene Objekt initialisiert werden.

Nur wo?

In der Klassen-Deklaration geht das nicht, weil ich da das Objekt noch nicht kenne. Und selbst wenn ich es bekannt mache, meckert der Kompiler rum.

Im Konstruktor geht auch nicht, weil der Kompiler vorher schon rummecker.

Wo initialisiert man so eine Referenz?
 
moin


Ja, hab jetzt nochmal nachgeschalgen.
Referenzen dürfen NICHT Null sein, aber das weisst du ja.

Und nach der initialisierung kann man Referenzen nciht mehr auf ein Objekt richten.
Und da du das "Zeilobjekt" ja bei der initialisierung ncihts kennst, musst du vielleicht nen Zeiger statt einer Referenz nehmen.

Oder spricht was gegen einen Zeiger?


mfg
umbrasaxum
 
Ja, daß ich aus undefinierbaren Gründen ab und zu mal NULL Zeiger da habe und partou nicht herausfinde, warum... darum bau ich da lieber 'ne Referenz hin. Dann weiß ich, daß die immer valid ist.
 
Referenzen können NUR im Constructor in der Initializer-Liste initialisiert werden. Alles andere wäre ja eine Zuweisung, und da das Ding ja dann nicht initialisiert ist, gibt's nix zum Zuweisen.

Bleistift:

Code:
CMyClass::CMyClass() :
  myReference( CMyOtherClass::Instance() )
{
}
 
jccTeq hat gesagt.:
Ja, daß ich aus undefinierbaren Gründen ab und zu mal NULL Zeiger da habe und partou nicht herausfinde, warum... darum bau ich da lieber 'ne Referenz hin. Dann weiß ich, daß die immer valid ist.
Täusch dich nicht. Spätestens wenn du mal eine lokale Variable als Referenz zurückgegeben hast, weisst du, dass auch Referenzen ihre Fallstricke bieten. Ansonsten würde ich aber alleine schon der eleganteren Semantik wegen immer Referenzen gegenüber Zeigern bervorzugen.
 
Zurück