Ich habe ein Problem mit virtuellen Methoden in C++ auf einem Multithreading-Kontext (Linux).rein virtuelle Methode im Thread der konkreten Klasse aufgerufen
Das nächste Beispiel zeigt mein Problem aus:
class Base {
};
class Concrete1: public Base { //define pure virtual function
virtual void func() = 0;
};
class Concrete2: public Concrete1 { //override of virtual func
void func() {}
void run(){
//....
pthread_create(&handle, NULL, Concrete2::thread, static_cast<void*>(this));
}
static void* thread(void arg*){
Concrete2 *ptr = static_cast<Concrete2*>(arg);
//Concrete1 *ptr = static_cast<Concrete2*>(arg); // same error
while(1){
//....
ptr->func()
}
}
};
int main(){
Concrete2 obj;
obj.run();
pthread_exit(NULL);
return 0;
}
Wenn die Leitung ptr->func()
ausgeführt wird, wird folgende Fehlermeldung angezeigt:
pure virtual method called terminate called without an active exception
Kann mir jemand sagen, warum die rein virtuelle Methode aufgerufen wird anstelle der überlagerten Methode?
Wo deklarieren Sie 'func' als virtuell? –
@ G.M. Es spielt keine Rolle, ob es das gleiche ist, aber das override-Schlüsselwort kann helfen, es einzugrenzen, wenn dies nicht der Fall ist. – Paul
Ich denke, bezogen: https://stackoverflow.com/questions/7381757/c-terminate-called-without-an-active-exception – rsp