0

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?

Community
  • 1
  • 1
Richard J. Ross III
  • 55,009
  • 24
  • 135
  • 201

2 Answers2

3

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.

walkytalky
  • 9,453
  • 2
  • 36
  • 44
2

This:

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

should be:

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

Since you've defined the name tokens to mean struct tokens.

unwind
  • 391,730
  • 64
  • 469
  • 606