“使用未定义类型”错误即使我已经预先声明了类型

用户16038533

我正在制作一个国际象棋游戏,我有一些大致如下所示的课程。

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

模态错误,因为已经声明了“未定义”变量

为什么我会收到未捕获的类型错误:如果声明了 var,则无法读取未定义的属性“长度”?

即使在 TS 中声明了变量,也未定义

即使声明了键也未定义的索引

类型错误:this.canvas 未定义(在声明的对象中)

yacc错误没有类型声明,但是我已经在Tiger.grm中声明了这些?

类型错误 .then 未定义

错误C2027:使用未定义的类型-如何声明类

如何从已经预先声明的类继承

VBA声明未定义的类型变量?

使用未定义的类型

收到类型错误,提示我的websocket变量未定义

为什么即使声明了全局变量,Javascript代码也会显示“未定义”?

Axios - 如果我已经声明了函数返回类型,我是否应该“输入断言”返回的数据?

类型错误:使用 React Hooks 未定义电影

错误:在C中无效使用未定义类型的struct

通用类型推断,Fluent Api,具有预先声明的类型

在Internet Explorer生成变量时声明变量编译错误:未定义用户定义的类型

VBA 的 DLL 声明行中的编译器错误“未定义用户定义的类型”

AJAX 类型错误:查询未定义

类型错误:RADIOBUTTON [i]是未定义

类型错误:历史未定义

未定义的元组的python类型错误

解决类型错误:事件未定义

AnyLogic getHomeLocation()错误“类型未定义”

类型错误:this.getResults(...) 未定义

对于类型错误,未定义findViewById

即使确认数据存在于前一行,也会出现此错误!我错过了什么?类型错误:无法读取未定义的属性“包含”

错误类型错误:_co.userData是未定义的,当我尝试对值使用属性绑定时,在角度7中