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

cap*_*ain 31 c struct calloc

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

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.


oiy*_*yio 7

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