2010-11-18 18 views
0

J'essaie de créer une structure avec une valeur par défaut, comme décrit ici: Default values in a C Struct. Cependant, j'ai ce code C, dans un fichier d'en-tête:C La variable a un initialiseur incomplet

/* tokens.h */ 
typedef struct { 
    char *ID; 
    char *KEY; 
    char *TYPE; 
} tokens; 

const struct tokens TOKENS_DFLT = { 
    "id", 
    "key", 
    "type" 
}; 

Et je reçois une erreur sur la ligne 7 disant:

error: variable 'TOKENS_DFLT' has initializer but incomplete type 

Quelqu'un peut-il s'il vous plaît me expliquer ce que ce problème est et comment Je peux le réparer et l'empêcher à l'avenir?

Répondre

3

Vous n'avez pas défini struct tokens. Vous avez défini un struct sans nom et simultanément typedef avec le nom de type tokens.

Si vous aviez défini au lieu

typedef struct tokens_ { 
    char *ID; 
    char *KEY; 
    char *TYPE; 
} tokens; 

Ensuite, vous pouvez déclarer votre constante soit:

const struct tokens_ TOKENS_DFLT = { ... }; 

Ou

const tokens TOKENS_DFLT = { ... }; 

Comme il est, vous êtes entre deux tabourets.

+0

Merci, c'est ce qui l'a corrigé –

+0

maintenant j'obtiens un avertissement: 'Spécificateur de classe de stockage inutile dans la déclaration vide' –

2

Ce:

const struct tokens TOKENS_DFLT = { 
    "id", 
    "key", 
    "type" 
}; 

devrait être:

const tokens TOKENS_DFLT = { 
    "id", 
    "key", 
    "type" 
}; 

Puisque vous avez défini le nom tokens signifie struct tokens.