使用结构将sizeof应用于不完整类型无效

我有一个结构,我把所有关于球员的信息。 那是我的结构:

struct player{ int startingCapital; int currentCapital; int startingPosition; int currentPosition; int activePlayer; int canPlay; }; 

这是我的主要内容:

 #include  #include  #include "header.h" int main(int argc, char *argv[]) { int s,i,numOfPlayers; struct player *players; printf("Give the number of players: \n"); scanf("%d",&numOfPlayers); players = (struct player *)calloc(numOfPlayers,sizeof(struct player)); system("PAUSE"); return 0; } 

我要求用户给出玩家数量,然后我尝试分配所需的内存。 但我得到这个编译错误,我无法弄清楚:

 invalid application of `sizeof' to incomplete type `player' 

这意味着包含main的文件无法访问player结构定义(即不知道它的外观)。

尝试将其包含在header.h或者创建一个类似构造函数的函数,如果它是一个不透明的对象,则分配它。

编辑

如果您的目标是隐藏结构的实现,请在有权访问结构的C文件中执行此操作:

 struct player * init_player(...) { struct player *p = calloc(1, sizeof *p); /* ... */ return p; } 

但是,如果不应该隐藏实现 – 即main应该合法地说p->canPlay = 1 ,那么最好将结构的定义放在header.h

导致错误的原因,例如“使用struct …将sizeof应用于不完整类型”,总是缺少include语句。 尝试找到要包含的正确库。

我认为问题是你将#ifdef而不是#ifndef放在header.h文件的顶部。

尝试访问未初始化的extern数组的sizeof() ,也会显示错误:

 extern int a[]; sizeof(a); >> error: invalid application of 'sizeof' to incomplete type 'int[]' 

请注意,如果没有extern关键字,您将获得array size missing错误。