这是我的BoardField.h:
#pragma once
#include "ChessPiece.h"
#include "Game.h"
#include <SDL.h>
class BoardField{
private:
ChessPiece m_piece;
SDL_Rect m_field;
public:
friend class Game;
};
和Game.h
#pragma once
#include "BoardField.h"
class Game {
private:
//members
BoardField* m_board_fields; // 16th line
...
//methods
...
public:
...
};
我在尝试编译时在VS2017中遇到这些错误:
问题出在哪里?即使尝试创建新项目,它也无论如何都无法发挥作用。
答案 0 :(得分:2)
要打破循环引用,您应该使用前向引用。由于您使用的是原始指针,所以只需要:
#pragma once
class BoardField;
class Game {
private:
//members
BoardField* m_board_fields;
...
//methods
...
public:
...
};
当然,在Modern C++中你应该避免使用原始指针。对于像私有堆分配这样的情况,unique_ptr在大多数情况下是最佳选择:
#pragma once
#include <memory>
class BoardField;
class Game {
private:
//members
std::unique_ptr<BoardField> m_board_fields;
...
//methods
...
public:
...
};
您应该阅读this blog post