我正在制作一个国际象棋游戏,我有一些大致如下所示的课程。
struct MovementValidator;
struct Piece
{
Piece(MovementValidator* movementValidator) :
movementValidator{ movementValidator }
{
}
virtual ~Piece() { delete movementValidator; }
enum class Type
{
PAWN
};
MovementValidator* movementValidator;
virtual Type GetType() = 0;
};
struct PawnMovementValidator;
struct Pawn : public Piece
{
Pawn() :
Piece{ new PawnMovementValidator{} }
{
}
Type GetType() override
{
return Type::PAWN;
}
};
struct MovementValidator
{
virtual void Validate(const Piece& piece) = 0;
};
struct PawnMovementValidator : public MovementValidator
{
void Validate(const Piece& piece) override
{
}
};
int main()
{
Piece* piece = new Pawn{};
}
我Piece{ new PawnMovementValidator{} }
在 Pawns 构造函数中遇到在线错误。错误是:
Use of undefined type 'PawnMovementValidator'
为什么在使用PawnMovementValidator
类型之前预先声明类型会发生这种情况?
struct PawnMovementValidator;
是声明,而不是定义。它告诉编译器存在一个名为“PawnMovementValidator”的结构,但在Pawn
它的构造函数中需要知道结构的大小以便为其分配内存。换句话说,需要知道它的定义。
解决方法:不仅要声明struct,还要在使用前定义它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句