Wie leite ich unter .net/c++ von einer eigenen Klasse ab?



  • Hallo,

    ich werde jetzt vermutlich gleich gesteinigt für meine Frage, aber ich kriege es nicht hin.

    ref class Basisklasse
        {
        public:
            Basisklasse(int vari) {vari++;};
        private:
            ~Basisklacce() {};
        };
    
    ref class Abgeleitete : Basisklasse
        {
        public:
            Abgeleitete(int vari) {};
        private:
            ~Abgeleitete() {};
    

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

    Wie geht das richtig?
    Und wie gebe ich die Variablen an den Basiskonstruktor weiter?

    Nochmal Entschuldigung für die Fragen, aber ich finde einfach nichts und unter .net ist da wohl etwas anders.



  • Genauso wie in normalem C++?

    Abgeleitete(int vari): Basisklasse(vari) {}
    


  • Leider nicht. Da bekomme ich nur

    error C2062: 'int'-Typ unerwartet
    error C2143: Syntaxfehler: Es fehlt ';' vor '{'

    In der Hilfe habe ich zumindest eine solche Ableitung gesehen, wie oben von mir gemacht.



  • Nochmal komplett:

    ref class Basisklasse
        {
        public:
            Basisklasse(int vari) {vari++;};
        private:
            ~Basisklasse() {};
        };
    
    ref class Abgeleitete : Basisklasse
        {
        public:
            Abgeleitete(int vari): Basisklasse(vari) {};
        private:
            ~Abgeleitete() {};
    

    ...funktioniert nicht?

    Das Beispiel definiert für die Basisklasse nur einen Konstruktor mit einem Parameter. Der Konstruktor der abgeleiteten Klasse ruft diesen aber nicht auf, deshalb sucht der Compiler einen für die Default-Konstruktion, und den gibt es nicht. Ich kenne zwar nur wenig von der CLI-Erweiterung in C++/CLI, aber wenn das nicht grundlegend von normalem C++ abweicht stimmt das Beispiel ohne den Basisklassen-Konstruktoraufruf einfach nicht. Bei C# wäre es im übrigen genauso (nur dass das Keyword nicht der Basisklassenname sondern "base" ist).



  • Autsch - mein Name war gerade Programm.

    Danke es funktioniert so.
    Ich dachte, das muss in den Kopf hinein.

    Vielen Dank.


Anmelden zum Antworten