使用结构将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
错误。