Я думаю, что только следующие заголовки актуальны здесь:поле имеет неполную тип ошибки - опережающее объявление
Game.h
#include "Player.h"
class Game
{
private:
Player White;
Player Black;
Board current_board;
};
Player.h:
#include "Game.h"
#include "Piece.h"
class Player
{
private:
Chessend end;
std::string name;
std::vector <Piece> pieces;
Board* board_ptr;
Game* game_ptr;
};
Piece.h:
#include "Player.h"
class Player; //forward declaration
class Piece
{
private:
Chesspiece type;
bool moved, taken;
Player *player;
};
дает е следующая ошибка
In file included from Player.h:11:0,
from Game.h:1,
from main.cpp:1:
Game.h:20:10: error: field 'White' has incomplete type 'Player'
Player White;
^
In file included from Player.h:9:0,
from Game.h:1,
from main.cpp:1:
Piece.h:7:7: note: forward declaration of 'class Player'
class Player;
Я знаю, что есть опережающее объявление в Piece.h, но я не знаю, почему это является проблемой.
Не указывайте game.h в player.h, потому что они нужны друг другу. В Player вам нужна игра *, поэтому вы можете написать 'class Game' перед классом Player. И включите game.h после 'class Player {};' –
Когда у вас есть 2 класса, которые зависят от другого, когда вы не используете указатель, например 'Player White', вам необходимо, чтобы класс Player был определен заранее , –
Большое спасибо. Не уверен, что я когда-нибудь пойму это! – user3457175