Funktionszeiger-probleme
-
Hallo zusammen,
Ich wage mich grade an das Thema Funktionszeiger dran und das verwirrt mich leider etwasAlso ich habe folgendes Problem: In einer Klasse habe ich einen Haufen von Funktionen definiert. In meiner main Funktion erstelle ich ein neues Objekt einer Klasse, die einen Funktionszeiger als Variable enthält. Aus der meiner main Funktion heraus möchte ich diesen Zeiger auf eine Funktion der Funktionen aus der Klasse mit dem Haufen von Funktionen setzen und anschließend aufrufen. Leider scheint diese Funktion nicht aufgerufen zu werden.
So, da das ganze etwas verwirrend formuliert ist, hier mal der vereinfachte Quellcode:
#include <stdio.h> class Functions { public: void function(); }; class Element { public: void (Functions::*functionPointer)(); }; int main() { Element* element = new Element(); element->functionPointer = &Functions::function; element->functionPointer; int i = 0; return 0; } void Functions::function() { printf("hi"); }
Wäre super, wenn mir jemand weiß, wo hier der fehler liegt
-
Also erstmal fehlen natürlich die Klammern beim Funktionsaufruf. Aber das würde nicht reichen...
Du hast hier keinen normalen Funktionszeiger, sondern einen Memberzeiger gebastelt. Der kann nur zusammen mit einer Instanz seiner Klasse verwendet werden:
Functions f; (f.*(element->functionPointer))(); // sieht komisch aus, müsste aber stimmen (nicht getestet)
Das ist wahrscheinlich nicht, was du willst. Sondern du willst in Functions statische Methoden haben. Die kannst du auch mit normalen Funktionszeigern aufrufen:
void (*functionPointer)(); ... element->functionPointer = Functions::function; element->functionPointer();
(auch nicht getestet:p)
-
Danke erstmal für die schnelle Antwort
Ja, du hast natürlich recht, Memberzeiger sind für mein Projekt nicht so sinnvoll. Aber der Code zum Aufrufen funktioniert, obwohl er so komisch aussieht. Jetzt weiß ich zumindest wie das funktioniert, falls ich doch noch mal Memberzeiger brauchen sollte
Dankeschön