Zeiger auf Memberfunktion
-
Hallo
Ich bin langsam etwas am verzweifeln, weil ich mit dem Thema hier echt nicht fertig werde. Also ich habe eine Klasse Namens Class1 in deren Header steht folgendes:
int (Class::*pFunc)(std::vector<CCube>);im Konstruktor steht dies:
pFunc = &Class::Einsen;Nun habe ich in einer anderen Klasse eine Instanz von Class1:
Class1 class;Und nun versuche ich den Funktionszeiger zu nutzen:
int iResult = (class.pFunc)(m_vCubes);Leider bekomme ich immer folgende Fehlermldung:
error C2064: term does not evaluate to a function taking 1 arguments
Mit der Lösung von Microsoft kann ich leider nichts anfangen. Ich will am Ende ein Array von Funktionszeiger auf die einzelnen Memebervariablen von Class1 haben.
Ich hoffe, dass ich mich verständlich ausgedrückt habe.
chrische
-
Hallo,
Abgesehen davon, dass du ein Schlüsselwort als Objektnamen verwendest, muss die Zeileint iResult = (class.pFunc)(m_vCubes);so aussehen:
int iResult = (class.*pFunc)(m_vCubes);Gruß Caipi
-
Die Instanz heißt doch nicht wirklich "class"? Wenn doch, dann liegt da schonmal der Hund begraben.
MfG SideWinder
-
Hallo
Nein die Instanz heisst natürlich nicht "class". Das war nur ein etwas blöd gewählter Alias von mir. Wir können Sie ab jetzt ja m_class nennen.
Der Compiler würde doch eine solche Namenswahl nicht erlauben, oder?
chrische
-
chrische5 schrieb:
Hallo
Nein die Instanz heisst natürlich nicht "class". Das war nur ein etwas blöd gewählter Alias von mir. Wir können Sie ab jetzt ja m_class nennen.
Besteht das Problem denn immernoch? Wenn ja, poste doch mal einen Code-Snippet.
Der Compiler würde doch eine solche Namenswahl nicht erlauben, oder?
Nein.
Gruß Caipi
-
Caipi schrieb:
chrische5 schrieb:
Hallo
Nein die Instanz heisst natürlich nicht "class". Das war nur ein etwas blöd gewählter Alias von mir. Wir können Sie ab jetzt ja m_class nennen.
Besteht das Problem denn immernoch? Wenn ja, poste doch mal einen Code-Snippet.
[/quote]
Das Problem besteht immernoch. Ich habe doch eigentlich im ersten Post alles geschickt. Ich weiss nicht recht, was ich noch an Code posten soll.
chrische.
-
Eventuell die Fehlermeldung, die _nach_ der von Caipi vorgeschlagenen Änderung kommt?

-
Hallo
LordJaxom schrieb:
Eventuell die Fehlermeldung, die _nach_ der von Caipi vorgeschlagenen Änderung kommt?

Ich hatte den einen Post übersehen.
Wenn ich die Zeile dementsprechend ändere (hatte ich vorher auch schon probiert) bekomme ich folgende Fehlermeldung:
error C3861: 'pFunc': identifier not found
Auch hier ist mir eigentlich klar, was diese Fehlermeldung bedeutet, aber im meinem Zusammenhang verstehe ich nicht, wie ich sie beheben soll.
chrische
-
-
Hallo
tipp schrieb:
Vielen Dank für diesen Link. Ohne den hätte ich es erst gar nichtso weit gebracht, wie jetzt schon bin. Ich bräuchte also etwas konkreter Hilfe.
Danke
chrische
-
Hallo
Hat keiner von Euch eine Idee, was ich hier falsch mache?
chrische
-
Hier sind wohl zwei Klassen im Spiel. Class und Class1.
Class1::pFunc ist ein Zeiger auf eine Memberfunktion von Class.
class.pFunc ist jetzt nur ein Zeiger ohne Instanz. class ist in Deinem ersten Post vom Type Class1. Dir fehlt also noch eine Instanz von Class, deren Funktion gerufen werden soll. BTW, die Benamsung macht es schwierig Deine Fragestellung zu verstehen.
Siehe unten stehendes Beispiel (compiliert und getestet mit gcc 3.3.4):#include <iostream> class A { public: int f(); }; int A::f() { return 1; } class B { public: B(); int (A::*pFunc)(); }; B::B() { pFunc = &A::f; } int main() { B b; A a; std::cout << (a.*b.pFunc)() << std::endl; }
-
Hallo
Das hat mir sehr geholfen.
Vielen Dank
chrische
-
Übrigens gibts dazu nen guten Artikel in der FAQ.
Da steht auch noch viel anderes interessantes...
-
Hallo
phlox81 schrieb:
Übrigens gibts dazu nen guten Artikel in der FAQ.
Da steht auch noch viel anderes interessantes...Mit dem Artikel hatte ich bereits gekämpft. Bezieht sich der zweite Satz deiner Aussage auf den Artikel oder auf die FAQ allgemein?
chrische