C ++ 's reine virtuelle Funktion Implementierung und Header-Dateien

8

Ich habe Probleme mit der Implementierung rein virtueller Funktionen, die von einer abstrakten Klasse übernommen wurden, wenn die fraglichen Klassen in *.h und *.cpp files unterteilt sind. Der Compiler ( g++ ) sagt mir, dass die abgeleitete Klasse wegen der Existenz von reinen Funktionen nicht instanziiert werden kann.

%Vor%

Bedeutet dies, dass ich die Methode () zweimal deklarieren muss - in der *.h der Schnittstelle und in derived.h auch? Gibt es keinen anderen Weg?

    
Neo 13.01.2011, 00:29
quelle

2 Antworten

12

Sie haben vergessen, Derived::method() zu deklarieren.

Sie haben versucht, es zumindest zu definieren, aber Derived::Interface::method() anstatt Derived::method() geschrieben, aber Sie haben nicht einmal versucht, es zu deklarieren. Daher existiert es nicht.

Daher hat Derived keine method() , daher wurde die rein virtuelle Funktion method() von Interface nicht überschrieben ... und daher ist Derived auch rein virtuell und kann nicht instanziiert werden.

>

Außerdem ist public void method()=0; nicht gültig C ++; es sieht eher wie Java aus. Reine virtuelle Memberfunktionen müssen tatsächlich virtuell sein, aber Sie haben virtual nicht geschrieben. Auf Zugriffsbezeichner folgt ein Doppelpunkt:

%Vor%     
Lightness Races in Orbit 13.01.2011, 00:34
quelle
11

Sie müssen Ihre Methode in der Unterklasse deklarieren.

%Vor%     
robert 13.01.2011 00:34
quelle