virtual Methode und Operatoren Überladen

amine89

Mitglied
hallo zusammen

ich habe ein Problem und zwar mein compler zeigt : " undefined reference to vtable Basis Klasse " als fehler

Koennt ihr erkaeren ,wo das Problem liegt ??
 
Ich rate mal so ins blaue hinaus:
Virtuelle Methode ohne Körper und nicht pure virtual definiert?

Also bsp:
C++:
class Foo {
public:
   virtual void foo();
};

Grüsse
Cromon
 
ich habe auch virtual Methode ohne Koerper definieren
kann jemanden weiter helfen
Sollte das zufälligerweise heissen
Korrekturfee hat gesagt.:
Ja, ich habe eine pure virtual-Funktion definiert. Was kann ich gegen den Fehler machen?
?

Dann ist die Antwort:
Du brauchst einen override. Also:
C++:
class Foo
{
    public:
        virtual void foo(); //Error: Es fehlt der Funktionscode
        virtual void foo() = 0; //Ok, du musst die Funktion allerdings in der erbenden Klasse definieren oder einfach nicht verwenden (letzteres macht wenig Sinn)
        virtual void foo(){}; //Ok, du darfst die Funktion verwenden und überschreiben, sie macht einfach nichts

};

class Bar : public Foo
{
    public:
        //Folgender Code überschreibt die vorherige Definition. Hebt den Fehler auf.
        virtual void foo() override {
            //Code kommt hier oder in die .cpp
        }
};

//Verwendung:
Wenn als Option 1 definiert: Foo darf nie direkt konstruiert werden (aka. Foo f; ist _verboten_)
Wenn als Option 2 definiert: Foo.foo() darf nie aufgerufen werden, es sei denn in der erbenden Klasse
Wenn als Option 3 definiert: Foo darf ganz normal verwendet werden.

Ist aus dem Kopf, kann also fehlerhaft sein. Der Sinn bleibt aber: Option 1 ist immer falsch.

Gruss
cwriter
 

Neue Beiträge

Zurück