W.B. schrieb:
> void Test::SetStream(std::ostream& s) {
> os = s; // funktioniert nicht
Natürlich nicht.
Wenn eine Referenz einmal gesetzt ist, dann ist sie gesetzt. Man kann
eine Referenz später nicht mehr auf ein anderes Objekt 'umbiegen'.
Referenzen bekommen in der Initialisierung 'gesagt', für welches andere
Objekt sie stehen.
Alle weiteren Verwendungen dieser Referenz, die dann nur mehr
Zuweisungen sein können (keine Initialisierungen) beziehen sich dann
nicht mehr auf das Referenzobjekt sondern auf das referenzierte Objekt.
> Hat jemand eine Ahnung, wie man das Problem lösen kann?
Entweder einen Pointer halten oder einen Konstruktur machen, der die
Referenz übernimmt und initialisiert und dann nach Bedarf jeweils ein
neues Log-Objekt erzeugen.
Und die Unterscheidung von Initialisierung und Zuweisung beachten!
Das sind in C++ 2 grundverschiedene Dinge, die man auseinanderhalten
muss.
int i = 5;
und
int i;
i = 5;
sind nicht dasselbe! Das erste ist eine Initalisierung, das zweite eine
Zuweisung. Im Falle eines int ist das egal. Aber im Falle von echten
Objekten ist es das nicht. Initalisierung ist immer ein Teil einer
Objektkonstruktion. Da wird also ein Konstruktor aufgerufen. Bei einer
Zuweisung wird aber der operator= aufgerufen.