Visual Studio 不包含标题
Posted
技术标签:
【中文标题】Visual Studio 不包含标题【英文标题】:Visual Studio doesn't include header 【发布时间】:2018-03-03 18:20:08 【问题描述】:这是我的 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;
;
游戏.h
#pragma once
#include "BoardField.h"
class Game
private:
//members
BoardField* m_board_fields; // 16th line
...
//methods
...
public:
...
;
我在尝试编译时在 VS2017 中遇到了这些错误:
问题出在哪里?即使尝试创建新项目它也不起作用。
【问题讨论】:
第 16 行是哪一行?我认为第二个代码块是game.h?如果只编译发布的代码,是否会出现错误?BoardField.h
包括 Game.h
,其中包括 BoardField.h
。 BoardField
取决于 Game
取决于 BoardField
取决于 Game
哪个...等等永远。其中一个类将在声明之前使用。做一些关于循环包含和循环依赖和前向声明的研究。
@Someprogrammerdude 如何避免它并能够让班级成为朋友?
@FaustasButkus 再次对提到的项目进行一些研究。特别是“前向声明”
error: expected class-name before ‘’ token的可能重复
【参考方案1】:
要打破循环引用,您应该使用前向引用。由于您使用的是原始指针,这就是所需的全部:
#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
【讨论】:
以上是关于Visual Studio 不包含标题的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio Enterprise 2019,“配置文件”单元测试导致错误:文件不包含数据缓冲区
CS1729 'MyNavigationPage' 不包含采用 1 个参数的构造函数 --> 在 Visual Studio 2019 社区版中