Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
错误:未命名类型 我在C++中实现了一个象棋游戏,其中一些类是“棋盘”和“棋子”。 有“Rook”、“King”和,。。。等继承自“件”_C++_Types_Include - Fatal编程技术网

错误:未命名类型 我在C++中实现了一个象棋游戏,其中一些类是“棋盘”和“棋子”。 有“Rook”、“King”和,。。。等继承自“件”

错误:未命名类型 我在C++中实现了一个象棋游戏,其中一些类是“棋盘”和“棋子”。 有“Rook”、“King”和,。。。等继承自“件”,c++,types,include,C++,Types,Include,所以一块板是一个二维的碎片数组,所以board.h包含了piece.h 对于最近的发展(关于实施行动),我想让这些作品进入董事会。 所以在片中。h我包括板。h 这现在会产生上述错误 一些代码: //Function in piece.h #include "board.h" bool Piece::move( int toX, int toY, bool enemyPawn, const Board & b ) 错误:电路板未命名类型 错误:ISO C++禁止声明“B”,没有类型[-f

所以一块板是一个二维的碎片数组,所以board.h包含了piece.h

对于最近的发展(关于实施行动),我想让这些作品进入董事会。 所以在片中。h我包括板。h

这现在会产生上述错误

一些代码:

//Function in piece.h
#include "board.h"
bool Piece::move( int toX, int toY, bool enemyPawn, const Board & b )
错误:电路板未命名类型 错误:ISO C++禁止声明“B”,没有类型[-fPrime]。
board.h
:放置
类板(带分号!)在
包含工件.h之前
在
片段中.h
:放置
类片段(带分号!)在
include board.h之前
一般来说,如果我在标题中定义一个类,我会将
class位于文件顶部,位于任何包含项上方

你有所谓的循环依赖关系。这两个头都试图包含彼此,要么失败(如果您有包含保护),要么无限循环(没有保护)。无论哪种方式,这一“前瞻性声明”都应该解决问题


如果这些类是如此紧密地联系在一起以至于不能修复它们,那么您必须“解开”它们。将piece/bishop/king/etc的函数定义移动到各自的
.cpp
文件(如果尚未移动),确保标题仅使用
板和
板*
(但不使用
值),然后替换
#包括“板”
类板。这会告诉编译器存在“未知”板类型,并且它可以通过指针和引用传递它。然后
piece.h
将没有依赖项,并且可以正确地从任何文件中包括,如
board.h

板中.h
:放置
类板(带分号!)在
包含工件.h之前
在
片段中.h
:放置
类片段(带分号!)在
include board.h之前
一般来说,如果我在标题中定义一个类,我会将
class位于文件顶部,位于任何包含项上方

你有所谓的循环依赖关系。这两个头都试图包含彼此,要么失败(如果您有包含保护),要么无限循环(没有保护)。无论哪种方式,这一“前瞻性声明”都应该解决问题


如果这些类是如此紧密地联系在一起以至于不能修复它们,那么您必须“解开”它们。将piece/bishop/king/etc的函数定义移动到各自的
.cpp
文件(如果尚未移动),确保标题仅使用
板和
板*
(但不使用
值),然后替换
#包括“板”
类板。这会告诉编译器存在“未知”板类型,并且它可以通过指针和引用传递它。然后
piece.h
将没有依赖项,并且可以正确地从任何文件中包括,如
board.h

因为move只使用引用,所以您完全可以避免包含board.h,而只向前声明您的类board。如果您确实需要让piece了解board和board了解piece,您可以向board声明一个接口类(纯抽象)并包含该接口,而不是board,确保board从接口派生–Martin刚才编辑,因为move只使用引用,你完全可以避免加入board.h,只需向前声明你的类board。如果您真的需要让piece了解board和board了解piece,您可以向board声明一个接口类(纯抽象)并包含该接口,而不是board,确保board从接口派生–Martin刚才编辑了这是一个循环依赖项。我最近读到的一个提示是,想象一下如何在一个头文件中定义这两个类,这样每个类都知道另一个类;答案是,你不能


要打破循环依赖关系,需要对其中一个类使用前向声明,而不是包含其头文件。不要包含“board.h”
,只要做
类board

这是一个循环依赖项。我最近读到的一个提示是,想象一下如何在一个头文件中定义这两个类,这样每个类都知道另一个类;答案是,你不能


要打破循环依赖关系,需要对其中一个类使用前向声明,而不是包含其头文件。不要包含“board.h”
,只要做
类board

您可以使用pimpl模式:请参阅您可以使用pimpl模式:请参阅如何定义Board?Board.h中可能存在问题,因为Piece::move定义看起来很好。这些是Board的包含。h
包括“bishop.h”
包括“king.h”
包括“knight.h”
“pawn.h”
包括“queen.h”
包括“rook.h”“
所以我从不直接包括棋子board包括bishop,bishop包括棋子,棋子包括棋子?你的棋盘是否包含空棋子?你如何定义棋盘?问题可能在board.h中,因为棋子::移动定义看起来很好。这些是board.h的包括。h
包括“bishop.h”
包括“king.h”
包括“knight.h”
包括“pawn.h”
包括“queen.h”
包括“rook.h”
所以我从不直接包括棋子棋盘包括bishop,bishop包括棋子,棋子包括棋盘?你的棋盘是否包含空棋子?我确实使用了include guards,它只会抛出更多错误(尽管该解决方案符合逻辑)无效使用“struct-Piece”的不完整类型“struct-Piece”转发声明导致包含项上方的转发声明(
classboard;
)无效 Error: Board does not name a type Error: ISO C++ forbids declaration of ‘b’ with no type [-fpermissive]