Forum: Mikrocontroller und Digitale Elektronik Problem mit Funktionspointer


von Micha (Gast)


Lesenswert?

Ich bekomme folgende Fehlermeldung.

Error[Pe167]: argument of type "void *" is incompatible with parameter 
of type "void (void) *"

Ich habe eine Funktion die ist wie folgt deklariert.

BYTE Timertestfunktion(void* CallBkFuntion, DWORD TimeOut)

in dieser Funktion wird eine 2. Funktion aufgerufen.

Bibfunktion(&TIDMsgRespTimer, CallBkFuntion, TimeOut);

Bei der Bibfunktion (CallBkFuntion) taucht dann auch die Fehlermeldung 
auf.

Die Übergabewerte kann ich bei beiden Funktionen nicht ändern.
Weiß jemand wie ich dieses Problem in den Griff bekommen könnte?

Gruß

von Karl H. (kbuchegg)


Lesenswert?

Micha schrieb:

> Die Übergabewerte kann ich bei beiden Funktionen nicht ändern.

Solltest du aber.

Pointer zurechtzucasten ist meistens ein sehr sicheres Indiz, dass 
irgendetwas nicht stimmt. Und einen void* in einen Funktionspointer 
casten zu müssen, ist ganz besonders übel.

Das hier
1
BYTE Timertestfunktion(void* CallBkFuntion, DWORD TimeOut)

sollte eigentlich so aussehen
1
BYTE Timertestfunktion(void (*CallBkFuntion)(void), DWORD TimeOut)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Karl heinz Buchegger schrieb:
> Und einen void* in einen Funktionspointer
> casten zu müssen, ist ganz besonders übel.

Genauer gesagt: das ist vom C-Standard nicht gedeckt.  Man darf einen
Zeiger auf ein Objekt in einen Zeiger vom Typ void* casten und dann
zurück auf den Objektzeiger, aber Funktionszeiger darf man nur auf
andere Funktionszeiger casten, nicht auf Objektzeiger (und umgekehrt).

von Micha (Gast)


Lesenswert?

Danke für die schnellen Antworten. Ich habe jetzt den Übergabewert der 
Timertestfunktion geändert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.