c typedef (ed) непрозрачный указатель - PullRequest
15 голосов
/ 14 марта 2011

Я определил непрозрачную структуру и связанные API, как это:

typedef struct foo foo;
foo *create_foo(...);
delete_foo(foo *f);

Я не могу определить структуру в моем c-файле. Выдает ошибку переопределения.

typedef struct foo {
   int implementation;
}foo;

Я могу использовать foo в файле c без typedef, но я хочу использовать typedef (то есть использовать его непосредственно как foo *). Есть ли способ?

1 Ответ

22 голосов
/ 14 марта 2011

У вас уже есть typedef в заголовке, поэтому включите его и определите struct foo в реализации без typedef.

foo.h:

typedef struct foo foo;
foo *create_foo(...);
delete_foo(foo *f);

foo.c:

#include <foo.h>

struct foo { int implementation; };
/* etc. */
...