2016-10-15 1 views
2

(NB: es ist reines C/Arduino).C Vorwärtsdeklaration

Ich habe Tonnen von Links meine Frage gefunden, aber niemand hat mir geantwortet.

Ich habe eine Datei "Effects.h" und "Keyboard.h".

"Keyboard.h" benötigt, um "Effects.h" einzuschließen. So „Effects.h“ nicht enthalten „Keyboard.h

in „Effects.h“ Ich habe diese drei Funktionen aus:

extern fnKeyPress effectDrops(); 
extern fnKeyPress effectLineRotate(); 
extern fnKeyPress effectRainbowCycle(); 

alle über einen Zeiger auf eine Funktion zurückgeben sollte, dass diese beiden Parameter verwendet: const KeyWithColor *, const struct KeyConfiguration *

Also das ich versuche zu tun:

typedef void (*fnKeyPress)(const KeyWithColor *, const struct KeyConfiguration *); 
extern fnKeyPress effectDrops(); 
extern fnKeyPress effectLineRotate(); 
extern fnKeyPress effectRainbowCycle(); 

Aber ist nicht funktioniert, weil es sagen s:

Effects.h:32: error: 'KeyWithColor' does not name a type 
typedef void (*fnKeyPress)(const KeyWithColor *, const struct KeyConfiguration *); 

Was ist die Problemumgehung?

+2

Sie müssen auch die Typen weiterleiten. –

+0

@JoachimPileborg Vielen Dank für die "Idee", aber ich brauche konkretere Sachen ... darf ich Sie bitten, mir ein Beispiel zu geben? Vielen Dank –

+0

Wenn Sie geeignete Include-Wächter hinzufügen, kann jede Datei jede andere Header-Datei in beliebiger Reihenfolge enthalten. –

Antwort

2

Wenn Sie KeyWithColor und (vielleicht) KeyConfiguration weiterleiten müssen erklären:

(ich weiß nicht, ob Ihr KeyWithColor Typ eine Struktur ist, gehe ich davon aus, dass es der Einfachheit halber ist)

Dann Platz dies:

struct KeyWithColor; 
struct KeyConfiguration; 

Darüber:

typedef void (*fnKeyPress)(const KeyWithColor *, const struct KeyConfiguration *); 
extern fnKeyPress effectDrops(); 
extern fnKeyPress effectLineRotate(); 
extern fnKeyPress effectRainbowCycle(); 

Do In diesem Fall sind Sie auch bereit, die Typen zu deklarieren, wie im Kommentar angegeben. Und erzählt im Grunde die Compiler:

Sie wissen nicht, dies noch nicht, aber ich garantiere, dass es

definiert wird

Seien Sie vorsichtig NICHT in der Vorwärts Erklärung jede Art von Anwendung zu bringen.

+0

Vielen Dank –

Verwandte Themen