Konstruktor wird nicht aufgerufen



  • Hallo,

    ich benutze Eclipse mit MinGW unter Windows.

    Hier mein Code: (nur die wichtigsten Teile)

    Text::Text()
    {
      color[0] = color[1] = color[2] = 1.0f;
    }
    
    void Text::drawText(string text)
    {
      //draw text with color
      cout<<color[0]<<color[1]<<color[2]<<endl;
    }
    
    void MyClass
    {
    private:
      Text text;
    public:
      void render()
      {
        ...
        text.drawText("test");
      }
    }
    

    So, mein Problem ist nun, dass offensichtlich dre Konstruktor nicht aufgerufen wird. Ich setze nirgendwoanders die Farbe und wenn ich diesen Code ausführe sind die Werte con color nicht 1.0f.
    Wenn ich nun statt:

    Text text;
    

    einen Zeiger daraus mache und ihn mit new erzeuge:

    Text* text;
    
    MyClass::MyClass()
    {
      text = new Text();
    }
    

    Dann funktioniert es und der in color stehen die Werte 1.0f, wie es sein sollte.

    Also ich verstehe nicht warum dre Konstruktor nicht aufgerufen wird wenn ich es als feste Membervariable in die Klasse schreibe. Hat jemand eine Erklärung dafür? 😕

    Achja, ich instanziere MyClass als globale Variable. Könnte das vielleicht damit zusammen hängen?

    MfG Nico



  • dein quellcode sollte das machen, was du möchtest....

    void Text::drawText(string text) 
    { 
      //draw text with color 
      cout<<color[0]<<color[1]<<color[2]<<endl; 
    }
    

    was soll text hier eigtl tun?

    "Achja, ich instanziere MyClass als globale Variable. Könnte das vielleicht damit zusammen hängen?"
    eigtl nicht - erstellt werden muss es trotzdem - und so weit nicht anders implementiert ruft der standard-ctor den standard-ctor jedes members (und jeder basisklasse) auf...
    compilierbares minimalbsp?

    bb



  • Ok, nachdem ich ein clean gemacht habe hat es funktioniert. Irgendwie hat er ohne ein clean nicht meine Anweisungen übernommen die ich in den Konstruktor geschrieben habe, obwohl er die Object-Datei eigentlich neu gebaut hat. Muss wohl an Compilereinstellungen liegen oder direkt an MinGW 😉


Anmelden zum Antworten