C-变量的类型不完整“;“结构…”;

C-变量的类型不完整“;“结构…”;,c,struct,typedef,definition,incomplete-type,C,Struct,Typedef,Definition,Incomplete Type,我有一个container.h文件和一个container.c文件 在container.h文件中,我编写了以下内容: typedef结构容器; 以及container.c文件中的以下内容: #包括“container.h” 类型定义结构容器 { 尺寸/项目/数量; }容器; 但是,我不断得到变量的类型不完整的“struct Container”错误。这是否与将extern与struct或其他东西一起使用有关 编辑:我已将以下内容编译为一个库,并将其包含在另一个main.c文件中,我在该文件

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

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

typedef结构容器;
以及
container.c
文件中的以下内容:

#包括“container.h”
类型定义结构容器
{
尺寸/项目/数量;
}容器;
但是,我不断得到
变量的类型不完整的“struct Container”
错误。这是否与将
extern
与struct或其他东西一起使用有关

编辑:我已将以下内容编译为一个库,并将其包含在另一个
main.c
文件中,我在该文件中编写了以下内容:

#包括“library.h”
int main()
{
容器ctnr={0};
返回0;
}

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

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

这是具有main函数的翻译单元

#include "library.h"

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

  return 0;
}
需要知道结构定义才能为对象分配内存
ctnr
。但结构定义不可用。因此,编译器至少不知道要分配多少内存。
此外,不需要使用两个同名的typedef。其中一个typedef是多余的。

产生问题的代码是否准确、完整?它没有任何变量声明,所以我认为它不是。请提供一个完整的错误消息(包括行号)。@kaylum我遗漏了一部分,可能我会修改我的答案。谢谢你的回答。我在这里真的是个傻瓜,所以我不太明白你的意思,或者更确切地说是为什么会发生这种事。我将尝试对你的答案做一些研究,以理解它,所以谢谢你,但我还不能接受它。@xdraxulisx重新阅读答案。所有的内容都写得很清楚。读了一些之后:我想你的意思是我应该在头文件中定义
struct
。我想过这个,事实上我想过创建一个只包含标题的库,但它不会增加很多开销吗?我在某个地方读到了这篇文章,我需要尽可能提高性能。@xdraxulisx Yes>我在回答中写道,您必须将结构定义放在标题中。谢谢您的编辑,现在它更清晰了!