Zugriffsverletzung: Funktionszeiger

FSA

Erfahrenes Mitglied
Hallo!
Ich versuche einen Funktionszeiger auf eine Methode in einer Klasse zu erstellen. Wenn die Funktion aufgerufen werden soll, bekomme ich eine Zugriffsverletzung. Folgender Code besteht:

Code:
class Foo
{
private:
        virtual void	PhysicBodyCallbackIntern(const NewtonBody* body, dFloat timestep, int threadIndex);
public:
	typedef void(Foo::*CallbackFunc)(const NewtonBody*, dFloat, int);

        //...
};

Foo::Init()
{
    Foo::CallbackFunc pCallB = &Foo::PhysicBodyCallbackIntern;
}
pCallB ist ungleich NULL. pCallB wird einer FUnktion übergeben, welche die Methode aufruft.

Hat jemand einen Vorschlag was falsch läuft?
 
Zuletzt bearbeitet:
Hi.

Sieht eigentlich alles OK aus.

Wie rufst du denn die Methode auf? Vermutlich ist der Zeiger auf die Instanz der Klasse nicht valide.
 
Hallo,

kann es vielleicht sein, dass er Probleme mit der Deklaration der Methode als "virtual" hat?

Gruß,
Wolf
 
Tatsache! Er mochte das virtual nicht. Die Funktion muss static sein. Danke euch beiden!
 
Hallo FSA

Nein, die Funktion muss nicht unbedingt statisch sein:
C++:
class Foo
{
public:
	typedef void (Foo::*tCallback)();

	virtual void f() { }
};

class Bar : public Foo
{
public:
	virtual void f() { }
};

void fooBar(Foo* pFoo, Foo::tCallback cb) {
	(pFoo->*cb)();
}

int main() {
	Bar* b = new Bar();
	fooBar(b, &Foo::f);
	return 0;
}

Ruft Bar::f auf.

Viele Grüsse
Cromon
 
Laut Definition des Entwicklers (ich hatte nochmal bei ihm nachgefragt) muss die Funktion static sein.
Dein gezeigter Code entspricht meinem ersten Versuch, welcher fehlschlug.
 
Hallo,

also das mit dem "static" kann ich mir auch nicht vorstellen. Was mir aber gerade auffällt: Deine Methode oben, auf die du deinen Funktions-Zeiger legst ist zum einen als "private" deklariert, zum anderen sehen wir ja auch nur die Deklaration, während Cromons Beispielen ja auch deren Definition vorhanden ist.

Ich nehme mal an in einem der beiden Möglichkeiten (oder beiden) liegt der Hund im Pfeffer begraben.

Gruß,
Wolf
 

Neue Beiträge

Zurück