Initialisierung von Klassenfeldern

  • Themenstarter Themenstarter C152778
  • Beginndatum Beginndatum
C

C152778

Hallo,

ich würde gerne eine Klasse schreiben, welche direkt eine Initialisierung eines Feldes vornimmt:
Code:
class Test {
private:
  TypX t1;
  TypY t2(t1)
public:
  Test();
}
Leider sagt hier mein Compiler, dass dies nicht möglich ist. TypY besitzt in meinem Fall keinen default-Konstruktor, müsste also sofort t1 übergeben bekommen.

Warum funktioniert das so nicht und was wäre eine mögliche Lösung ?

Schöne Grüße, Cyraid
 
Tja, klassischer Fall für den Kopierkonstruktor würde ich auf den ersten Blick sagen.

obwohl ... innerhalb einer Klasse zwei Members kopieren ist schlechter Stil.
Das braucht man nicht, und sollte so auch in keinem Programm auftauchen.

Wozu soll das gut sein? Wenn du mit etwas mehr Info zum globalen Prog rausrückst, können wir dir evtl. helfen.

Fisch-B.I.
 
Hallo,

ich würde gerne eine Klasse schreiben, welche direkt eine Initialisierung eines Feldes vornimmt:
Code:
class Test {
private:
  TypX t1;
  TypY t2(t1)
public:
  Test();
}
Leider sagt hier mein Compiler, dass dies nicht möglich ist.
Womit er auch Recht hat.

TypY besitzt in meinem Fall keinen default-Konstruktor, müsste also sofort t1 übergeben bekommen.

Warum funktioniert das so nicht und was wäre eine mögliche Lösung ?
Membervariablen sollten im Konstruktor initialisiert werden. Verwende daher eine Initialisierungsliste:
C++:
Test::Test() : t1(), t2(t1) {
}

Grüße,
Matthias
 
Zurück