Klassenstruktur



  • Hallo!

    Ich hab ein paar Probleme mit der Handhabung der Vererbung bei C++.

    Ich habe einen abstrakte Managerklasse welche basieren auf einer Struktur bestimmte Aufgaben ausführen soll. Alle Methoden um z.B. ein Element hoch und runter zu schieben sind in TAbstractManager definiert. Jetzt will ich aber die Struktur auf die die Funktionen angewendet werden erst in der abgeleiteten Klasse definieren.

    Bei folgendem Aufruf

    TTest1Manager *test = new TTest1Manager;
    TTest1::TManagedStruct item = test->Get(3);
    

    Dabei bekomme ich folgenden Fehler:

    [C++ Fehler] test.cpp(48): E2034 Konvertierung von 'TAbstractManager::TManagedStruct' nach 'TTest1Manager::TManagedStruct' nicht möglich
    

    Anbei die Klassen 😉

    class __fastcall TAbstractManager
    {
        private:
            struct TManagedStruct {};
            DynamicArray<TManagedStruct*>TManagedArray;
    
        public:
            void __fastcall PositionUp(int Index);
            void __fastcall PositionDown(int Index);
            virtual AnsiString __fastcall ToAnsiString();
            virtual TManagedStruct __fastcall Get(int Index);
    };
    
    class __fastcall TTest1Manager : public TAbstractManager
    {
        public:
            struct TManagedStruct {
                int Position;
                AnsiString TestString1;
                AnsiString TestString2;
            };
    };
    
    class __fastcall TTest2 : public TAbstractManager
    {
        public:
            struct TManagedStruct {
                int Position;
                int TestZahl1;
                int TestZahl2;
            };
    };
    

    Danke für Eure Hilfe



  • Hallo,

    ohne mir jetzt im Detail angeschaut zu haben was du machst, wenn du schreibst:

    "class __fastcall TTest1Manager : public TAbstractManager"
    

    Werden nur alle als public deklarierent Valiablen und Methoden vererbt.
    Also besser wäre es hier deinen struct als protected zu deklarieren und dann die
    Ableitung auf dieser Ebene zu machen.
    Was auch fehlt, wenn du es nicht nur der Übersichtlichkeit wegen weg gelassen hast, ist die Deklaration der virtuellen Methoden der Basisclasse. Die müssen natürlich jetzt so in der Childclasse angelegt werden, das sie mit dem in dem hier deklariern strukt arbeiten können.

    Hoffe das hilft erstmal weiter
    Gruß
    Mikel


Anmelden zum Antworten