extern vars и struct определены в другом исходном файле - PullRequest
1 голос
/ 09 декабря 2011

Имеет два файла со структурными определениями.Заголовок:

typedef struct _InputData InputData;
extern InputData input_data;

и исходный файл:

struct _InputData{
    char const*modification_l;
    char const*amount_l;
    char const*units_l;
};
InputData input_data = {...};

Когда я пытаюсь использовать input_data из другого исходного файла, это дает мне «недопустимое использование неполного typedef 'InputData'».Я думаю, что понимаю, почему это произошло, но как я могу справиться с этим изящно.

Ответы [ 3 ]

2 голосов
/ 09 декабря 2011

Вы должны определить полную структуру в заголовочном файле.В противном случае невозможно узнать, какие поля у него есть, т. Е. Оно не заполнено.

1 голос
/ 09 декабря 2011

Вы можете использовать этот подход (более или менее), но вместо этого вам нужно определить структуру как указатель:

header

extern struct InputData* input_data;

исходный файл:

struct InputData{
    char const*modification_l;
    char const*amount_l;
    char const*units_l;
};

InputData* input_data; 
...
input_data = malloc(sizeof(InputData)); 
0 голосов
/ 09 декабря 2011

Вы можете использовать указатель на struct, определенный в другом месте, но не экземпляр.Компилятор не знает, какова структура и как рассчитать смещения памяти для такой переменной.

Почему вы помещаете определение struct в файл C?поставь в шапку.

...