I eine Basisklasse haben, die eine virtuelle Funktion hat:reimplementieren eine virtuelle Funktion von der Basisklasse in einer abgeleiteten Klasse Vorlage
class Base {
...
virtual void myFunction() { assert(0 && "not implemented yet"); }
}
und eine abgeleitete (Templat) -Klasse der Base:
DerviedClass.hpp :
Template<typename T>
class DerivedClass : public Base, public T {
...
void myFunction();
}
DerivedClass.cpp:
template <>
void DerivedClass<ClassA>::myFunction() {
//Something ClassA is suppose to do
}
Dies wird kompiliert. Aber wenn ich versuche, eine DerivedClass<ClassB>
zu instanziieren bekomme ich den Fehler:
IProject.o:-1: erreur : undefined reference to `DerivedClass<ClassB>::myFunction()'
Warum habe ich diesen Fehler? Warum dauert es nicht Base::myFunction
statt mich zu zwingen, eine generische myFunction
in DerivedClass
oder eine spezialisierte Funktion DerivedClass::myFunction
zu implementieren?
Hinweis: die Assertion in myFunction ist, weil ClassB
nicht myFunction
während runtime
anrufen soll. Zum Beispiel wenn myFunction
ist getRadius
, DerivedClass<Circle>::getRadius()
ist in Ordnung, aber DerivedClass<Square>::getRadius()
sollte nicht aufgerufen werden.
Anmerkung 2: Die anderen Themen, die ich waren zu diesem Zeitpunkt nicht klar gefunden
Sie möchten wahrscheinlich Ihr Design überdenken, um 'DerivedClass :: getRadius()' zu verbieten. –
Jarod42
'DerivedClass :: getRadius()' hätte an erster Stelle nicht existieren sollen. –
Ich habe diesen Entwurf gemacht, um alle DerivedClass als Base zu bearbeiten, ohne 'dynamic_cast' zu brauchen, wenn ich eine Funktion von einer Basisklasse aufrufen will. (Es gibt eine Menge abgeleiteter Klasse mit einer Menge Funktion, die aufgerufen werden muss) – ElevenJune