error C2512: Kein geeigneter Standardkonstruktor verfügbar



  • Einen Wunderschönen.

    Ich hantiere gerade ein wenig mit Klassen und dessen Vererbung rum.

    Habe folgendes Beispiel:

    class Lebewesen
    {
      private:
        int alter;
      public:
        Lebewesen( int neues_alter ) { alter = neues_alter; }
    };
    
    class Mensch : public Lebewesen
    {
      private:
        string name;
      public:
        Mensch( string neuer_name ) { name = neuer_name; }
    };
    

    ... das ist jetzt zwar nicht mein wirklicher Code, passt aber vom Aufbau ganz gut.

    Folgender Fehler tritt auf:
    [b]error C2512: 'Lebewesen' Kein geeigneter Standardkonstruktor verfügbar./b]

    Ich weiß, dass es etwas mit der Überladung zu tun hat.

    Irgendwo muss man wegen der Vererbung die Parameter mit angeben.

    Leider finde ich weder durch die Suche, noch durch Google den passenden Hinweis.

    Gruß, paSe



  • Also entweder bin ich blind, aber ich sehe an diesem code kein Fehler. Hast du noch mehr code den du uns zeigen könntest?



  • Du musst den Konstruktor von Lebewesen explizit aufrufen:

    Mensch( string neuer_name ) : Lebewesen( 0 )
    {
    }
    


  • Ahhh ... Sinn.

    Danke!



  • unlimieD.paSe schrieb:

    Ich weiß, dass es etwas mit der Überladung zu tun hat.

    Falsch, mit der Vererbung. Lebewesen hat keinen Standardkonstruktor, sondern nur einen mit einen int-Parameter. Daher muss dieser auch explizit angegeben werden.

    Dein Mensch-Konstruktor, muss diesen Parameter auch setzen:

    Mensch(string const & neuer_name) // Bei Objektübergaben unnötige Kopien vermeiden
    :   Lebewesen(0),    // Initialisierungsliste verwenden!
        name(neuer_name)
    {
        // <-- Hier erfolgt eine nachträgliche Zuweisung, zum Initialisieren sind die
        //     Initialisierungslisten gedacht.
    }
    


  • Ja naklar, ich sag doch das ich Blind war, blöde Sonne 😛


Anmelden zum Antworten