Funktion über Pointer aufrufen in C++
-
Hallo zusammen,
ich beschäftige mich gerade mit Pointer in C++ (zum ersten mal).
Nun habe ich die Aufgabe die Funktion über einen Pointer aufzurufen.Die Funktion lautet:
void select(char* selection){ // Do something. }
Wie kann ich jetzt die Funktion in der main über einen Pointer aufrufen?
SG
-
@C91 Wie würde denn der Typ für den Funktionspointer aussehen?
-
@C91 sagte in Funktion über Pointer aufrufen in C++:
habe ich die Aufgabe
Dann wirst du dazu ja auch etwas gelernt haben. Wo ist das Problem in der Anwendung des gelernten?
-
Schönerweise braucht man Funktionszeiger für den Aufruf ja nicht einmal explizit zu dereferenzieren. Also
(&select)(wasauchimmer);
Super
-
Ich weiß nicht so wirklich wie der Sourcecode aussehen muss.
Als erstes muss ich ja mal einen Pointer erzeugen:
void (*pointer) (char);
Nun müsste ich ihn auf die Funktion setzen:
pointer = select;
Hier bekomme ich einen Fehler bezüglich Konvertierung. Er markiert das "=".
-
@C91 sagte in Funktion über Pointer aufrufen in C++:
void (*pointer) (char)
void select(char* selection)
Finde den Unterschied.
-
@C91 Fehler C2440 in Visual Studio
-
@C91 sagte in Funktion über Pointer aufrufen in C++:
@C91 Fehler C2440 in Visual Studio
Da gibts es auch eine vollständige Meldung im Output Tab.
-
@C91 sagte in Funktion über Pointer aufrufen in C++:
@C91 Fehler C2440 in Visual Studio
Welchen Typ hast du für den Parameter bei deinem Funktionspointer angegeben? Und welchen Typ hat der erste Parameter von
select
tatsächlich? Istpointer
tatsächlich ein mitselect
kompatibler Funktionszeiger?
-
@C91 Twinkle, twinkle little star ...
-
@C91 sagte in Funktion über Pointer aufrufen in C++:
ich beschäftige mich gerade mit Pointer in C++ (zum ersten mal).
Nun habe ich die Aufgabe die Funktion über einen Pointer aufzurufen.Sicher, dass das die Aufgabe ist?
... Ich weiß ja nicht wie es bei den anderen war, aber wen man sich zum ersten mal mit Pointern beschäftigt, startet man in der Regel nicht mit Funktionspointern.
Müsste ich raten, würde ich sagen, die Aufgabe ist wohl die Funktion (normal) aufzurufen und ihr einen pointer als parameter zu übergeben. Ist jetzt aber nur Spekulation
Sollte ich da doch falsch liegen, hast du ja schon entsprechende Hilfe bekommen zu deiner ursprünglichen Frage
-
Du kannst auch immer https://cdecl.org/ verwenden - das hilft manchmal, gerade bei Funktionspointern, da das doch etwas ungewohnt sein kann.
Da kannst du mal mit rumspielen und Dinge wie dort oben im Beispiel
int (*(*foo)(void ))[3]
reinschreiben und solange modifizieren, bis es für dich passt.Edit: da das Ding versucht klug zu sein, interpretiert es "pointer" speziell. Wenn du also wissen willst, was dein Versuch
void (*pointer)(char)
bedeutet, dann ersetze pointer durch einen anderen Namen. Also du kannst z.B.
void (*zeiger)(char)
in das cdecl einfüttern und dann fällt dir hoffentlich auf, wo da was fehlt.