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.
Bedeutet dies, dass ich die Methode () zweimal deklarieren muss - in der *.h
der Schnittstelle und in derived.h
auch? Gibt es keinen anderen Weg?
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:
Tags und Links c++ inheritance abstract pure-virtual