Поле C имеет неполный тип - PullRequest
0 голосов
/ 10 ноября 2019

У меня есть следующий заголовочный файл:

 #ifndef SERVER_STRUCTURES_H
 #define SERVER_STRUCTURES_H

typedef struct game {
  int id;
  struct player player1;
  struct player player2;
  struct game *next;
} game_t;

typedef struct player {
  int id;
  int score;
  struct player *player1;
  struct game *g ;
} player_t;

#endif

Я получаю сообщение об ошибке: поле 'player1' имеет неполный тип struct player player1

и

field 'player2'имеет неполный тип struct player player2.

В чем ошибка? спасибо!

1 Ответ

1 голос
/ 10 ноября 2019

Объявления должны быть перед тем местом, где они используются, поэтому эти два объявления должны поменяться местами. Чтобы выделить player1 и player2, компилятору потребуется полное объявление struct player.

Затем вы должны сообщить компилятору, что struct game будет объявлено позже. Информации достаточно, чтобы создать «указатель на что-то».

#ifndef SERVER_STRUCTURES_H
#define SERVER_STRUCTURES_H

struct game;

typedef struct player {
  int id;
  int score;
  struct player *player1;
  struct game *g ;
} player_t;

typedef struct game {
  int id;
  struct player player1;
  struct player player2;
  struct game *next;
} game_t;

#endif
...