プレイヤーに関するすべての情報を置く構造体があります。それが私の構造です:
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'
これは、main
を含むファイルがplayer
構造体定義にアクセスできないことを意味します(つまり、どのように見えるかがわかりません)。
header.h
に含めるか、不透明なオブジェクトである場合に割り当てるコンストラクタのような関数を作成してください。
構造体の実装を非表示にすることが目的の場合、構造体にアクセスできるCファイルでこれを実行します。
struct player *
init_player(...)
{
struct player *p = calloc(1, sizeof *p);
/* ... */
return p;
}
ただし、実装を非表示にしない場合、つまりmain
が法的にp->canPlay = 1
と言う必要がある場合は、構造の定義をheader.h
に配置することをお勧めします。
「structofを持つ不完全な型へのsizeofの無効な適用」などのエラーの原因は、常にincludeステートメントの欠如です。適切なライブラリを見つけてください。
初期化されていない外部配列のsizeof()
にアクセスしようとすると、エラーも表示されます。
extern int a[];
sizeof(a);
>> error: invalid application of 'sizeof' to incomplete type 'int[]'
extern
キーワードなしでarray size missing
エラーが発生することに注意してください。
問題は、#ifdef
の代わりに #ifndef
の上部header.h
ファイル。