В board.h
: поставить class Board;
(с точкой с запятой!) Перед include piece.h
.
В piece.h
: поставьте class Piece;
(с точкой с запятой!) Перед include board.h
.
В общем, если я определяю класс в заголовке, я помещаю class <classname>;
вверху файла, над любым включает .
У вас есть то, что называется круговой зависимостью. Оба заголовка пытаются включить друг друга, и либо терпят неудачу (если у вас есть охранники), либо бесконечный цикл (без охранников). В любом случае, эта «предварительная декларация» должна решить проблему.
Если классы настолько связаны между собой, что это не исправляет их, вам придется их "развязать". Переместите определения функций для piece / bishop / king / etc в соответствующие им файлы .cpp
(если они еще не были), убедитесь, что заголовки используют только board&
и board*
(но не board
по значению). ), а затем замените #include "board";
на class board;
. Это сообщает компилятору, что существует «неизвестный» тип платы, и он может передавать его по указателю и по ссылке. Тогда piece.h
будет иметь нет зависимостей и может быть корректно включен из любого файла, например board.h
.