# Referenz Member initialisieren?



## jccTeq (24. Februar 2005)

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?


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

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


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

Wie erledige ich diesen Fehler?
Danke

Gruß,
Hendrik


----------



## Tobias K. (24. Februar 2005)

moin


Vielleicht mit = NULL; ?
ist nur geraten!


mfg
umbrasaxum


----------



## jccTeq (24. Februar 2005)

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?


----------



## Tobias K. (24. Februar 2005)

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


----------



## jccTeq (24. Februar 2005)

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.


----------



## Endurion (24. Februar 2005)

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:


```
CMyClass::CMyClass() :
  myReference( CMyOtherClass::Instance() )
{
}
```


----------



## Kachelator (24. Februar 2005)

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.


----------



## Endurion (24. Februar 2005)

Er kachelt äh lebt!

Und ich hab immer noch nicht alle Schafe gefunden...


----------



## Kachelator (24. Februar 2005)

Endurion hat gesagt.:
			
		

> Er kachelt äh lebt!
> 
> Und ich hab immer noch nicht alle Schafe gefunden...


Du sollst ja auch keine Schafe suchen, sondern Bugs!


----------

