Столкнулся с такой ситуацией, что класс поля и класс змейки используют друг друга, т.к. змейка изменяет матрицу поля, а поле создает цикл их передвижение(а также передает им события нажатия биндов). Но я никак не могу успокоить компилятор, потому-что в заголовках этих классов инклюдятся они же сами друг у друга. Как сделать так, чтобы всё это работало?
field.h
#include <vector>
#include "snake.h"
class Field {
public:
std::vector<std::vector<int>> matrix;
std::vector<Snake*> snakes;
int w, h;
bool hasWalls = false;
Field() {};
Field(int w, int h) {};
//
// Returns all empty tile coordinates.
//
std::vector<std::pair<int, int>> getEmptyTiles() {};
//
// Placing food tile in random place.
//
void generateFood() {};
//
// Creating border of walls for matrix.
//
void generateWalls() {};
//
// Set empty tile for specific place.
//
void clear(int x, int y) {};
//
// Set any type of tile for specific place.
//
void set(int x, int y, int t) {};
//
// Returns tile at specific place.
//
int at(int x, int y) {};
//
// Start the game at current field.
//
void render(float pixelSize) {};
};
snake.h
#include <vector>
#include "field.h" // на данном моменте компилятор понимает, что что-то идет не так
#include "enums.h"
class Snake {
public:
std::vector<std::pair<int, int>> tiles;
Field& field;
int x, y;
int length = 1;
int direction, score = 0;
bool alive = true;
Snake(Field & f, int x, int y, int startLength) : field(f) {};
//
// Add tile to snake at absolute position.
//
void add(int x, int y) {};
//
// Change the direction of snake.
//
void rotate(int d) {};
//
// Add tiles to tail.
//
void grow() {};
//
// Move snake by it direction.
//
void shift() {};
};