Konstruktur aus einem Konstruktor aufrufen
-
Hi,
ich habe heute den ganzen Vormittag damit verbracht, herauszufinden wieso eine Klasse bei mir nicht richtig initialisiert wird. Jetzt konnte ich den Fehler eingrenzen und bin zu dieser Klasse gekommen:class T { private: int i_; public: T(int i) : i_(i) { } T() { T(0); } };
Die Frage ist wieso wird i_ nicht mit 0 initialisiert wenn ich den T()-Konstruktor aufrufe? Sollte doch funktionieren, oder?
-
Nö
Einen anderen Konstruktor als den eigenen aufzurufen geht nicht.
-
T(0);
erzeugt ein temporäres Objekt vom Typ T, das gleich wieder weggeworfen wird.
-
Hmm, wie wäre es mit
class T { private: int i_; public: T(int i=0) : i_(i) { } };
-
fubar schrieb:
Hmm, wie wäre es mit
class T { private: int i_; public: T(int i=0) : i_(i) { } };
In dem Fall funktioniert es, in meinem Fall ...
[...] ProjectTemplate(const AnsiString &name, const AnsiString &stdFile, const AnsiString &wizard, TIcon *icon, const DWORD &flags, bool isHidden, const AnsiString &author, const AnsiString &description, bool UseStdFile, const TStringList * helpFiles, const HostList * hostList) : name_(name.c_str()), stdFile_(stdFile.c_str()), wizard_(wizard.c_str()), flags_(flags), isHidden_(isHidden), author_(author.c_str()), description_(description.c_str()), useStdFile_(useStdFile), helpFiles_(helpFiles), hostList_(hostList) { // Es geht um folgende Anweisungen, damit ich sie nicht in anderen // Konstruktoren neuschreiben muss. if (! helpFiles_) helpFiles_ = new TStringList; if (! hostList_) hostList_ = new HostList; } ProjectTemplate(const AnsiString &name) { ProjectTemplate(name, "", "", NULL, 0, false, "<unknown>", "", true, NULL, NULL); [...]
... wäre es etwas Problematisch ;). Aber ich schreibe einfach eine Funktion die das ganze implementiert und die ich dann von den Konstruktoren aufrufen werde.