我有一个结构,我把所有关于球员的信息.那是我的结构:
struct player{
int startingCapital;
int currentCapital;
int startingPosition;
int currentPosition;
int activePlayer;
int canPlay;
};
Run Code Online (Sandbox Code Playgroud)
这是我的主要内容:
#include <stdio.h>
#include <stdlib.h>
#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;
}
Run Code Online (Sandbox Code Playgroud)
我要求用户给出玩家数量,然后我尝试分配所需的内存.但我得到这个编译错误,我无法弄清楚:
invalid application of `sizeof' to incomplete type `player'
Run Code Online (Sandbox Code Playgroud)
cni*_*tar 28
这意味着包含的文件main
无法访问player
结构定义(即不知道它的外观).
尝试将其包含在内header.h
或创建类似构造函数的函数,如果它是一个不透明的对象,则分配它.
如果您的目标是隐藏结构的实现,请在有权访问结构的C文件中执行此操作:
struct player *
init_player(...)
{
struct player *p = calloc(1, sizeof *p);
/* ... */
return p;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果不应该隐藏实现 - 即main
应该合法地说p->canPlay = 1
将结构的定义放入其中会更好header.h
.