Forum: Compiler & IDEs wer kennt ne saubere lösung?


von ... (Gast)


Lesenswert?

typedef void (StateFctPtr*)(type_Dispatcher*pSM);

typedef struct tag_StateMachine
{
  StateFctPtr *FunctionPointers;
  UINT32 currentIdx;
  UINT32 stateCount;
} type_Dispatcher;


die typendeklaration des funktionspointer kennt den struct_typ nicht,
und wenn ich es umdrehe, dann kennt das struct den funktionspointertyp 
nicht...


und nun?

danke mal...

von dummy (Gast)


Lesenswert?

>typedef void (StateFctPtr*)(type_Dispatcher*pSM);

Ziemlich bescheuert einen Funktionsprototypen
mit einem typedef vorne weg anzugeben.

von Simon K. (simon) Benutzerseite


Lesenswert?


von Stefan E. (sternst)


Lesenswert?

Verwende nicht den neuen Typ beim Funktionspointer, sondern die struct 
mit einer Vorwärtsdeklaration.
(Nebenbei: der Stern beim Funktionspointer ist auf der falschen Seite)

1
struct tag_StateMachine;
2
3
typedef void (*StateFctPtr)(struct tag_StateMachine *pSM);
4
5
typedef struct tag_StateMachine
6
{
7
  StateFctPtr *FunctionPointers;
8
  UINT32 currentIdx;
9
  UINT32 stateCount;
10
} type_Dispatcher;

von ... (Gast)


Lesenswert?

ah, danke Stefan...

ja, das ist mir auch aufgefallen, mit dem Stern auf der falschen seite, 
danke.

danke simon

@dummy:
das ist kein Prototyp, das ist eine Typendeklaration, und zwar der Typ 
"Zeiger auf Funktionen deren Prototyp gemäss Deklaration beschaffen ist"
sowas ist hilfreich um Functionszeigerarrays zu deklarieren:

StateFctPtr Funktionszeiger[] =
{
  Fct1,
  Fct2,
  ...
};

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.