2017-08-21 6 views
-5

Ich möchte eine Struktur initialisieren, die ich gemacht habe, aber ich bekomme Fehler und ich kann nicht verstehen, was sie verursacht hat. Ich arbeite an GCC mit ANSI C Flagge.C - Fehler beim Initialisieren der Struktur mit Array-Mitgliedern

Wenn jemand mir helfen kann zu verstehen, was das Problem ist, werde ich es sehr schätzen!

typedef struct _inst { 
    const char *name[NUM_OF_INSTRUCTIONS]; 
    int codes[NUM_OF_INSTRUCTIONS]; 
    int validParam[NUM_OF_INSTRUCTIONS];  
} instructions; 


instructions instructionsData; 

instructionsData.name[] = {"mov", "cmp", "add", "sub", "not", "clr", "lea", "inc", "dec", "jmp", "bne", "red", "prn", "jsr", "rts", "stop"}; 
instructionsData.codes[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; 
instructionsData.validParam[] = {2, 2, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 0, 0}; 

und die Fehler, die ich von gcc erhalten sind:

dataStructs.h:47:17: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token 
instructionsData.name[] = {"mov", "cmp", "add", "sub", "not", "clr", "lea", "inc", "dec", "jmp", "bne", "red", "prn", "jsr", "rts", "stop"}; 
       ^
dataStructs.h:47:140: warning: ISO C does not allow extra ‘;’ outside of a function [-Wpedantic] 
instructionsData.name[] = {"mov", "cmp", "add", "sub", "not", "clr", "lea", "inc", "dec", "jmp", "bne", "red", "prn", "jsr", "rts", "stop"}; 
                                      ^
dataStructs.h:48:17: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token 
instructionsData.codes[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; 
       ^
dataStructs.h:48:82: warning: ISO C does not allow extra ‘;’ outside of a function [-Wpedantic] 
instructionsData.codes[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15}; 
                       ^
dataStructs.h:49:17: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘.’ token 
instructionsData.validParam[] = {2, 2, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 0, 0}; 
       ^
dataStructs.h:49:81: warning: ISO C does not allow extra ‘;’ outside of a function [-Wpedantic] 
instructionsData.validParam[] = {2, 2, 2, 2, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 0, 0}; 
+7

Könnten Sie bitte den Code kopieren und einfügen und keine Screenshots hochladen? –

+0

betrügen? https://Stackoverflow.com/a/41510479/2173917 –

+0

@SouravGhosh obwohl Lösung ist das gleiche, ich denke, das Problem ist anders. Nicht ein Betrogener? –

Antwort

3

Was Sie tun, ist eine Zuordnung Post Initialisierung. Sie können solche Arrays nicht zuordnen.

Was können Sie stattdessen tun ist -

instructions instructionData = {{"mov", "cmp" ... }, {0, 1, 2, ... }, {2, 2 ,2 ... }}; 

Dies initialisiert die gesamte Struktur in der Definition.

Zur gleichen Zeit, wenn Ihre Struktur hat andere Felder, die Sie nicht über die Anfangswerte für, können Sie bezeichnet initializers verwenden -

instructions instructionData = {.codes={0, 1, 2, ... }}; 

Dies initialisiert alle anderen Felder auf die Standardanfangswerte für die jeweilige Typen wie NULL für Zeiger, 0 für ganze Zahlen usw.

Wenn Sie absolut einzelne nicht Skalarfelder schreiben Initialisierung zuordnen müssen Sie memcpy als

verwenden können

Sie können auch von sizeof (instructionData.name) verwenden, aber dann müssen Sie sicherstellen, dass Ihr Initialisierer mindestens so lang wie das Feld ist.

+0

du bist * angst *? ;) –

+0

@FelixPalmen ich bin * sicher *;) –

+0

danke, es wird jetzt kompiliert! aber ich verstehe immer noch nicht, was das Problem war ... – CrazyPhrog

Verwandte Themen