Verständnisproblem Funktionspointer



  • Also irgendwie will das bei mir nicht wirklich klappen mit dem Funktionszeiger.

    Ich hab mir das Tutorial von newty.de durchgelesen - soweit ist mir auch eigentlich alles klar - trotzdem funktioniert folgendes nicht wie gewünscht:

    #include <iostream>
    
    void (*pFunction)(int) = NULL;
    void setFunction(void (*funcname)(int));
    void output (int i);
    
    void setFunction(void (*funcname)(int)) {
    	pFunction = funcname;
    }
    
    void output(int i)  {
    	std::cout<<"ausgabe: "<<std::cout<<static_cast<int>(i);
    }
    
    int main (int argc, char **argv)  {
    
    	setFunction(&output);
    	int wert = 4;
    	(*pFunction)(wert);
    	std::cin.get();
    	return 0;
    }
    

    Als Ausgabe erhalte ich statt 4:

    ausgabe: 5C56ED484
    

    Hab ich Tomaten auf den Augen? 🙂 Ich finde den Fehler nicht.



  • Weil der Fehler nix mit Funktionszeigern zu tun hatte. Du hast nur cout ausgegeben.

    std::cout<<"ausgabe: "<<static_cast<int>(i);
    


  • Ja aber die Funktion zur Ausgabe wird ja über einen Funktionszeiger aufgerufen. Als Parameter übergebe ich den Integerwert 4 - somit sollte die Ausgabe doch dann:
    ausgabe: 4 lauten.

    P.S.: omg - ich schäme mich so 😞 heuuuuul
    Verzeiht mein sinnlose posting, das zweite std::cout hab ich konsequenterweise überlesen.



  • std::cout<<"ausgabe: "<<std::cout<<static_cast<int>(i);
    

    Mich verwirrt, daß Du in dieser Zeile zweimal std::cout benutzt hast. Mach das mal heile. Vorher mag ich nicht über mögliche andere Fehler nachdenken.



  • Ja genau das war ja der Fehler - bzw das, was mich ebenfalls verwirrt hat 🙂
    Ich hab mich bei der Suche nach der Ursache der eigenartigen Ausgabe immer nur auf die Funktionspointer und Funktionsaufrufe und Zuweisung etc. konzentriert und damit eben auch komplett übersehen, dass ich std::out in std::out packe.

    Eben ein völlig alberner Fehler, den ich nun behoben habe und somit gibt es natürlich auch kein Verständnisproblem mehr - > mein thread ist also nonsense gewesen leider.


Anmelden zum Antworten