Initialisierungsliste
-
Hallo zusammen,
kann ich mit der Initialisierungsliste des Konstruktors eine Memberinstanz initialisieren? Was ich möchte ist folgendes:
Es gibt zwei Klassen C1 und C2. Der Konstruktor von C2 erwartet einen std::string und einen int als Parameter. C2 ist quasi eine Hilfsklasse von C1. C1 erwartet ebenfalls im Konstruktor einen std::string und einen int. Ich möchte nun, dass sobald eine Instanz von C1 erzeugt wird, die Memberinstanz der Klasse C2 innerhalb von C1 mit genau den selben Konstruktorargumenten erzeugt wird. Hier etwas Code:
C2.h: class C2 { public: C2(string hostname, int port); protected: C1& c1; } C1.h: class C1 { public: C1(string hostname, int port); //... }
und die zugehörigen .cpp-Dateien...
Versucht habe ich folgendes, aber der g++ meckert:
C2.cpp: C2::C2(string hostname, int port) : c1(hostname, port) { //... }
warning: initializer list treated as compound expression C2.cpp:9: error: invalid initialization of reference of type ' C1&' from expression of type 'int' make: *** [C2.o] Fehler 1
Ich möchte Pointer vermeiden. Wie kann ich sowas hinbekommen?
TIA
-
maverique schrieb:
Es gibt zwei Klassen C1 und C2. Der Konstruktor von C2 erwartet einen std::string und einen int als Parameter. C2 ist quasi eine Hilfsklasse von C1. C1 erwartet ebenfalls im Konstruktor einen std::string und einen int. Ich möchte nun, dass sobald eine Instanz von C1 erzeugt wird, die Memberinstanz der Klasse C2 innerhalb von C1 mit genau den selben Konstruktorargumenten erzeugt wird.
Diese Aussage steht in Widerspruch zu deinem Code; ich vermute, du hast C1 und C2 verwechselt.
maverique schrieb:
Ich möchte Pointer vermeiden. Wie kann ich sowas hinbekommen?
Du brauchst weder Pointer noch eine Referenz!
//C2.h: class C2 { public: C2(string hostname, int port); protected: C1 c1; // nicht C1& c1, dann klappts } //C1.h: class C1 { public: C1(string hostname, int port); //... } //C2.cpp: C2::C2(string hostname, int port) : c1(hostname, port) { //... }
Moritz
-
also entweder C2 besitzt C1 oder es hat nur einen Zeiger, bzw. wie in deinem Beispiel, eine Referenz darauf.
Ein Zeiger oder eine Referenz kann nur auf ein bestehendes Objekt zeigen.
-
Vielen Dank.
Ganz richtig, ich brauche gar keine Referenz. Manchmal sieht man den Wald vor lauter Bäumen nicht...