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?



  • 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.


Anmelden zum Antworten