Konstruktoren vererben **gelöst**



  • ich habe folgende Klassen

    public ref class CTest
    {
    protected:
      array<unsigned short> ^rguwArray;
    public:
      CTest(){rguwEPC = gcnew array<unsigned short>(6);}
    }
    
    ref class CTestVererbt : public CTest
    {
    public:
      unsigned short GetElement(unsigned char Index){return rguwArray[(6>Index)?Index:0];}
    }
    

    und in meinem Code möchte ich nun

    CTestVererbt ^Vererbt = gcnew CTestVererbt();
    

    aufrufen und dort bringt er den Fehler:

    error C2512: CTestVererbt::CTestVererbt: Kein geeigneter Standardkonstruktor verfügbar

    warum wird mein Konstruktor nicht mit vererbt?

    MfG



  • Konstruktoren werden nicht vererbt.
    Du musst geeignete Konstruktoren in den abgeleiteten Klassen impl.
    Simon



  • Ok hab ich mir schon gedacht.

    Wenn ich in meiner Basisklasse mehrere Konstruktoren habe und ich eine Instanz der Abgeleiteten Klasse erzeuge wird dort immer der Konstruktor ohne Parameter (CTest()) genommen oder?

    MfG



  • ich möchte

    public ref class CTest
    {
    protected:
      array<unsigned short> ^rguwArray;
    public:
      CTest(unsigned char ubLength){rguwEPC = gcnew array<unsigned short>(ubLength);}
    }
    
    ref class CTestVererbt : public CTest
    {
    public:
      CTestVererbt(unsigned char ubLength){}
      unsigned short GetElement(unsigned char Index){return rguwArray[(6>Index)?Index:0];}
    }
    

    er bringt bei CTestVererbt(unsigned char ubLenth){} dann den Fehler:

    error C2512: 'CTest': Kein geeigneter Standardkonstruktor verfügbar

    Wie muß ich das machen?



  • public ref class CTest
    {
    protected:
      array<unsigned short> ^rguwArray;
    public:
      CTest(unsigned char ubLength){rguwEPC = gcnew array<unsigned short>(ubLength);}
    }
    
    ref class CTestVererbt : public CTest
    {
    public:
      CTestVererbt(unsigned char ubLength) : CTest(ubLength) {}
      unsigned short GetElement(unsigned char Index){return rguwArray[(6>Index)?Index:0];}
    }
    

    Du musst ihn noch aufrufen, den Basis Klassen Konstr.
    Simon



  • Anmerkung:

    Wenn mindestens ein selbst erstellter Konstruktor vorhanden ist, wird kein Standardkonstruktor erstellt. Den musst Du dann auch selber kodieren.

    Ohne Verwendung des Basisinitialisierers von theta wird versucht, den Standardkonstruktor von CTest aufzurufen, der ja nun mal nicht vorhanden ist. Deshalb die Fehlermeldung.



  • danke


Anmelden zum Antworten