我之前有一个正在运行的项目。在重新排列了一些代码后,我试图重新编译我的项目,然后奇怪的事情开始发生。请看编译器输出中的这一部分内容。我是使用MinGW G++在Windows上从Eclipse进行编译的。
**** Build of configuration Debug for project Pract2 ****
**** Internal Builder is used for build ****
g++ -O0 -g3 -Wall -c -fmessage-length=0 -omove.o ..\move.cpp
In file included from ..\/game.h:11:0,
from ..\/piece.h:10,
from ..\/move.h:10,
from ..\move.cpp:7:
..\/board.h:18:2: error: 'Piece' does not name a type
board.h,第18行:
Piece* GetPieceAt(int row, int col) const;
通常情况下,这种情况发生时,我只需要添加一些我忘记添加的包含文件。但是实际上,我已经在board.h的顶部包含了piece.h。
我的第二个想法是编译器必须在
Piece
类中生成了一个错误,导致编译器忽略了该类的存在,从而导致更多错误。在这种情况下,我会查看第一个编译器错误,我预计它会是有关piece.cpp或piece.h中的错误。但是第一个错误与Piece
无关,因此我查看了Eclipse是否标记了piece.cpp或piece.h中的任何错误。没有,没有任何红线。我只看到了一些这些未解释的黄色标记。我最后检查的是每个头文件都包含包含保护,它们确实包含了。
我如何找出这个错误的根本原因?我可以发布代码片段,但那样我可能最终会粘贴整个代码(我不能这样做),因为可能需要额外的上下文。 编辑: 这是board.h到第18行的内容。(我略去了一个大的注释,解释了为什么这个代码块比您预期的要小。)
#ifndef BOARD_H_
#define BOARD_H_
#include "piece.h"
class Board {
public:
// Prototypes for externally defined functions
Board();
~Board();
void PrintBoard();
Piece* GetPieceAt(int row, int col) const;