Search code examples
cvariable-initializationincomplete-type

C Variable has incomplete initializer


I am trying to make a struct with a default value, as described here: Default values in a C Struct. However, I have this C code, inside a header file:

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

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

And I am getting an error on line 7 saying:

error: variable 'TOKENS_DFLT' has initializer but incomplete type

Can anyone please explain to me what this problem is and how I can fix it and prevent it in the future?


Solution

  • You haven't defined struct tokens. You've defined an unnamed struct and simultaneously typedef-ed it to the type name tokens.

    If you had instead defined

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

    Then you could declare your constant as either:

    const struct tokens_ TOKENS_DFLT = { ... };
    

    Or

    const tokens TOKENS_DFLT = { ... };
    

    As it is, you're between two stools.