Eine abstrakte Klasse in C++ hat mindestens eine pure virtual Funktion (gekennzeichnet durch virtual ... = 0). Diese Funktionen können per Definition nicht direkt aufgerufen werden, da sie keine Implementierung haben (auch per Definition). Sollte die Methode dennoch aufgerufen werden, wird das Programm (von der Runtime) mit der Fehlermeldung „Pure virtual function call“ abgebrochen.

Wie bekommt man einen Pure Virtual Function Call?

Dies kann z.B. durch Aufrufen von virtuellen Methoden im Konstruktor oder Destruktor auftreten:

struct A {
	A(){ g(); }
	virtual void f()=0;
	void g(){ f(); }
};
struct B : public A {
 	B(){}
	void f() { cout << "B::f" << endl; }
};
int main()
{
	B x;
}

Wie kann man einen Pure Virtual Function Call bemerken?

Man kann (zumindest laut C++-Standard) auch eine Implementierung einer pure virtual function definieren. Der gcc weigert sich hier jedoch (noch).

virtual void f()=0
{
	assert( !"pure virtual function call" );
}

So kann man sich einfach nach dem assert zur fraglichen Stelle durch den Call-Stack hangeln.