class b:public a| a:no appropriate default constructor available



  • beim erzeugen eines objects von klasse b:

    class a
    {
    public:
    a(parameter i);
    ~a()
    };
    
    class b:public a
    {
    public:
    b(parameter f);
    ~b();
    };
    

    kommt die fehlermeldung
    "a:no appropriate default constructor available"

    das hinzufügen eines standart konstruktors bringt jedoch nichts ausser einer weiteren fehlermeldung:
    "public: __thiscall a::a(void)" (??0Game@@QAE@XZ) referenced in function "public: __thiscall b::b(parameter f)" (??0Sprite@@QAE@PBDHH@Z)

    error: 1 unresolved external

    die msdn hat mir nicht wirklich weitergeholfen also frage ich ma hier

    mfg



  • Da du keinen Default Konstruktor in A hast musst du den Überladenen in der Initialisierungsliste deines Konstruktors in B als erstes aufrufen:

    b::b( parameter f ) : a( f ){}
    

    BR

    evilissimo



  • Und wenn Du einen Default Constructor einbaust solltest Du ihm auch einen Rumpf spendieren, sprich implementieren (das sagt die zweite Fehlermeldung).



  • b::b()
    :a()
    {
    }{/cpp]
    geht nicht
    [cpp]
    b::b()
    :a(parameter f)
    {
    }
    

    auch nicht

    bei beiden kommt die fehlermeldung "public thiscall.."

    edit: ok habe implementiert, jetzt stürzt das programm ab 👎



  • Das ist auch nicht korrekt. Zumindest nicht so wie du uns deine Klasse gezeigt hast

    class A
    {
    protected:
       int var;
    public:
       // Standard Konstruktor 
       A()
       : var(0)
       {} 
       // Überladener Konstruktor 
       A( int i )
       :var(i)
       {} 
    
       virtual ~A(){} // Destruktor
    };
    
    class B : public A
    {
    public:
      // Standard Konstruktor
      B() // A() wird automatisch aufgerufen
      {} 
    
      B( int i )
      : A(i) // Explizit Überladung A( int ) aufrufen
      {}
    
      B( foobar fb ) // Auch hier automatisch A() aufgerufen
      {}
    };
    

    Eventuell verstehst du das so eher.

    BR
    evilissimo


Anmelden zum Antworten