Недопустимое применение sizeof к неполному типу со структурой
У меня есть структура, куда я помещаю всю информацию об игроках. Это моя структура:
struct player{
int startingCapital;
int currentCapital;
int startingPosition;
int currentPosition;
int activePlayer;
int canPlay;
};
И это мое главное:
#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;
}
Я прошу пользователя указать количество игроков, а затем пытаюсь выделить необходимую память. Но я получаю эту ошибку компилятора, которую я не могу понять:
invalid application of `sizeof' to incomplete type `player'
4 ответа:
Это означает, что файл, содержащий
main
, не имеет доступа к определению структурыplayer
(т. е. не знает, как оно выглядит).Попробуйте включить его в
header.h
или создать функцию, похожую на конструктор, которая выделяет его, если он должен быть непрозрачным объектом.EDIT
Если ваша цель-скрыть реализацию структуры, сделайте это в файле C, который имеет доступ к структуре:
struct player * init_player(...) { struct player *p = calloc(1, sizeof *p); /* ... */ return p; }
Однако, если реализация не должна быть скрыта-т. е.
main
должен юридически скажем,p->canPlay = 1
было бы лучше поместить определение структуры вheader.h
.
Причина таких ошибок ,как " недопустимое применение sizeof к неполному типу со структурой... "это всегда отсутствие включающего заявления. Попробуйте найти правильную библиотеку для включения.