Как частично объявить структуру с заданным типом во включаемом файле

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

5
задан Art Swri 15 March 2012 в 17:24
поделиться