Newcomer in cpp hier, sei beraten, möglicherweise Dummheit voraus.Rückgabe statische Element für virtuelle Funktion, fehlende vtable für abstrakte Klasse
Ich habe versucht, eine statische Eigenschaft zurückzugeben, wenn eine virtuelle Funktion implementiert wird. Dies gibt einen Linkfehler aus, der besagt, dass die Funktion nicht implementiert wurde. Ich bin mit diesem Problem verloren.
konnte ich den Fehler mit dem folgenden abgespeckte Code reproduzieren:
#include <iostream>
#include <map>
class Abstract1 {
public:
virtual char* getFoo();
};
class Base: public Abstract1 {
public:
char* getFoo() {
return Base::mapper[1];
}
static std::map<int,char*> mapper;
};
std::map<int, char*> Base::mapper;
int main(int argc, const char * argv[]) {
Base::mapper[0] = "Hello!\n";
Base::mapper[1] = "Goodbye!\n";
Base* hello = new Base();
// insert code here...
std::cout << hello->getFoo() << "\n";
return 0;
}
Nachgeben der folgenden Linkfehler:
Undefined symbols for architecture x86_64:
"typeinfo for Abstract1", referenced from:
typeinfo for Base in main.o
"vtable for Abstract1", referenced from:
Abstract1::Abstract1() in main.o
Sie müssen auch einen virtuellen Destruktor hinzufügen, wenn Sie aus einem 'Abstract1'-Zeiger löschen möchten. –