C - 变量类型不完整 "struct ..."

C - Variable has incomplete type "struct ..."

我有一个 container.h 文件和一个 container.c 文件。

container.h 文件中,我写了以下内容:

typedef struct Container Container;

以及 container.c 文件中的以下内容:

#include "container.h"

typedef struct Container
{
  size_t item_count;
} Container;

但是,我一直收到 variable has incomplete type "struct Container" 错误。这与将 extern 与 struct 或其他东西一起使用有关吗?

编辑:我已将以下内容编译为库,并 #include-d 在另一个 main.c 文件中编写了以下内容:

#include "library.h"

int main()
{
  Container ctnr = { 0 };

  return 0;
}

这意味着唯一知道结构定义的翻译单元是带有文件container.c的翻译单元。

如果任何其他翻译单元需要知道结构定义,那么编译器将发出错误,因为结构定义不可用。您需要将结构定义放在 header.

这是翻译单元的主要功能

#include "library.h"

int main()
{
  Container ctnr = { 0 };

  return 0;
}

需要知道结构定义才能为 object ctnr 分配内存。但是结构定义不可用。所以编译器至少不知道要分配多少内存。 也不需要使用两个同名的 typedef。其中一个 typedef 是多余的。