Pointer auf Funktion
-
Hallo,
ich möchte einen Pointer auf die Funktion "division", wenn ich das wie im Beispiel realisiere erhalte ich für den Pointer aber immer die Ausgabe 1, anstatt eine "richtige Adresse".
Kann mir bitte jemand einen Tipp geben wo der Fehler liegt. Die Initialisierung und die Deklaration habe ich 1 zu 1 aus meinem Buch übernommen.
Danke schon jetzt.
Kaspar#include<iostream> using namespace std; double division(int d1, int d2){ return d1/d2; } int main(){ // Deklaration double (*PFoo)(int, int); // Initialisierung PFoo = & division; cout << PFoo << endl; // 1 :confused: return 0; }
-
Funktionszeiger und Zeiger auf Daten sind untereinander nicht kompatibel. Zudem hat
ostream::operator<<keine Überladung für Funktionszeiger (das wäre auch gar nicht so einfach zu machen). Daher ist die passendste Überladung für einen Funktionszeiger derostream::operator<<(bool), dessen Ergebnis du hier siehst.Falls Funktionszeiger und Datenzeiger auf deinem System die gleiche Größe haben (sofern du nicht für MS-DOS oder ähnliches programmierst wird dies der Fall sein) kannst du mit einem reinterpret_cast den Funktionszeiger in einen void* umwandeln und somit wie einen "normalen" Zeiger ausgeben:
cout << reinterpret_cast<void*>(PFoo);
-
Hallo SeppJ,
Vielen Dank für die schnelle Antwort. Mit reinterpret_cast<void*>(*PFoo); funktioniert es.
Danke!
Kasper