Я пытаюсь свести к минимуму взаимозависимость файлов #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 - пытаясь избежать таких зависимостей.) Спасибо.