Обычно я пытаюсь свести к минимуму взаимозависимость файлов #include.
В xxx.h у меня есть:
struct my_struct; // partial decl to satisfy use of my_struct*
void funct(struct my_struct* ms); // uses the partial def
Как сделать аналогичный частичный decl со структурой typedef? У меня есть фактический decl в каком-то третьем #include, который выглядит так (скажем, в yyy.h):
typedef struct my_data_s {
int ival;
... struct's other components ...
} my_data_t;
Я просто хочу репрезентативный decl в xxx.h, который ссылается на typedef:
typedef struct my_data_s my_data_t; // actual full decl is elsewhere
void funct2(my_data_t* md);
Эта попытка вызывает «переопределение typedef my_data_t ' ошибка. (Используя gcc 4.4.3/Ubuntu 10.4) Другие попытки случайного поиска (например, добавить '{}' к typedef) также дают ошибки.
Я знаю, что компилятору нужно знать только то, что функции требуется указатель, так что, похоже, это должно быть возможно. Пока не нашел ничего, что компилировалось бы без ошибок/предупреждений.
Я просмотрел другие вопросы и ответы, но не нашел решения этой проблемы. Похоже, должен быть хорошо известный способ сделать это (?!) (Я знаю, что я могу #include yyy.y каждый раз, когда я #include xxx.h - пытаясь избежать таких зависимостей.) Спасибо.