Hallo,
ich brauche eine Forward Declaration von Function Pointern.
Im Anhang habe ich mal einen hässlichen Workaround gemacht, jedoch würde
ich gern folgendes machen: (die Header Datei anschauen....)
/*
* HIER FEHLT die Forward Declaration damit die Function Pointer
* bekannt sind.
*/
typedef struct
{
uint16_t adrfunc;
uint16_t startaddr;
uint16_t count;
const uint16_t *timervar;
const uint16_t triggerval;
const ModbusTGetData getdata;
const ModbusCallback callback;
} TModbusDef;
typedef void* (*ModbusTGetData)(TModbusDef *pmdef);
typedef void (*ModbusCallback)(TModbusDef *pmdef, uint8_t retCode,
uint8_t count, void *data);
Alles probiert.... Hat da der GCC ein Problem??
Vielen Dank im Voraus!
Jens
typedef struct SModbusDef TModbusDef;
typedef void (*ModbusCallback)(TModbusDef *pmdef, uint8_t retCode,
uint8_t count, void *data);
struct SModbusDef
{
uint16_t adrfunc;
uint16_t startaddr;
uint16_t count;
const uint16_t *timervar;
const uint16_t triggerval;
const ModbusTGetData getdata;
const ModbusCallback callback;
};
A. K. schrieb: > typedef struct SModbusDef TModbusDef; > > typedef void (*ModbusCallback)(TModbusDef *pmdef, uint8_t retCode, > uint8_t count, void *data); > > struct SModbusDef > { > uint16_t adrfunc; > uint16_t startaddr; > uint16_t count; > const uint16_t *timervar; > const uint16_t triggerval; > const ModbusTGetData getdata; > const ModbusCallback callback; > }; Oder auch ganz ohne anfängliches typedef:
1 | struct SModbusDef; |
2 | |
3 | typedef void (*ModbusCallback)(struct SModbusDef *, uint8_t, uint8_t, void *); |
4 | |
5 | typdef struct SModbusDef |
6 | {
|
7 | uint16_t adrfunc; |
8 | uint16_t startaddr; |
9 | uint16_t count; |
10 | const uint16_t *timervar; |
11 | const uint16_t triggerval; |
12 | const ModbusTGetData getdata; |
13 | const ModbusCallback callback; |
14 | } TModbusDef; |
Vielen Dank!!! Einfach das Problem umdrehen und eine Forward Declaration für den struct! Hab beide Versionen getestet!!! Geht beides!!! Ich habe versucht eine Forward Declaration des Function Types zu finden... Das sollte ja auch gehen.... Nur wie? Schöne Grüße und vielen Dank nochmal - Problem ist gelöst, Die Frage nur aus akademischen Interesse! Jens
Jens R. schrieb: > Ich habe versucht eine Forward Declaration des Function Types zu > finden... > Das sollte ja auch gehen.... Nur wie? Nope. Für den Funktionspointer brauchst du die struct. Wenn auch nur in der Form: Ja, gibt es. Also muss die zuerst da sein. Das reicht dann schon um damit einen Pointer bilden zu können. > Schöne Grüße und vielen Dank nochmal - Problem ist gelöst, Die Frage nur > aus akademischen Interesse! Versuch mal einen typedef zu schreiben für einen Funktionspointer, die als Returnwert einen Funktionspointer vom gleichen Typus hat. Viel Spass!
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.