Zeiger auf Memberfunktion
-
Hi Leute,
also ich hab da folgendes Problem:
Ich habe zwei Klassen.
Erste Klasse:
In der ersten Klasse deklariere ich einen Funktionszeiger auf eine Memberfunktion in der zweiten Klasse.
Zweite Klasse:
In der zweiten Klasse hab ich dann ne Instanz von der ersten Klasse erzeugt. Außerdem gibt es eine Funktion zum Setzen des Funktionszeiger der ersten Klasse und ne Funktion zum Ausführen dieses Funktionszeigers.Das ganze sieht dann so aus:
#include <stdio.h> class ClassB; typedef void (ClassB::*Ptr2MemberB)( void); class ClassA { public: Ptr2MemberB ptr; }; class ClassB { public: ClassA A; void f(){ printf( "f was called\n");} void Zuweisung(); void Execute(); }; void ClassB::Zuweisung() { A.ptr = &ClassB::f; } void ClassB::Execute() { (A.*(A.ptr))(); //Error: ClassB is not a public base class of ClassA } void main(void) { ClassB B; B.Zuweisung(); B.Execute(); }
In der Execute-Funktion der Klasse ClassB liefert mir der Compiler immer die Fehlermeldung 'ClassB is not a public base class of ClassA'.
Kann ich dies irgendwie umgehen, ohne die Klasse ClassA von ClassB ableiten zu müssen???
-
Du versuchst eine Methode aus B mit einem this Zeiger vom Typ A aufzurufen - das kann nicht gut gehen. Du musst die Methode mit einem this Zeiger vom Typ B aufrufen.
-
btw: Warum sind deine Variablen public?
-
Das sollte hier nur ein Beispiel sein. Deshalb hab ich nicht weiter darauf geachtet welche Sichtbarkeit die einzelnen Variablen haben sollen.
Mich würde auch nur interessieren ob dies überhaupt in irgendeiner Form machbar ist??
-
Du jagst dem falschen Ziel hinterher.
Wie Shade of Mine schon gesagt hat, versucht du eine B-Methode über ein A-Objekt aufzurufen. Wenn die beiden Klassen nicht verwandt sind, kann das nicht funktionieren. Entweder leitest du die Klassen ab oder du rufst die B-Methode über ein B-Objekt auf, je nachdem was dein Design ist.