为什么我不能dynamic_cast这个对象?

Why can't I dynamic_cast this object?

本文关键字:对象 cast 不能 dynamic 为什么      更新时间:2023-10-16
void test() 
{   
    Token test();   
    Actor* check;   
    check = dynamic_cast<Actor*>(test); 
}

此方法给了我以下错误,并用红色在大括号中划线测试。指针dynamic_cast的操作数必须是指向完整类类型的指针

我该如何解决这个问题?顺便说一下,Actor继承自令牌。下面是令牌头文件中的代码。

#pragma once
#include <string>
class Token
{
public:
    Token();
    Token(int x, int y);
    bool IsDead();
    ~Token();
    char Symbol();
    int X, Y;
    bool clear;
    bool indestructable;
    int health;
    int damage, rangeDamage;
    //bool npc;
    char character;
    std::string ToString();
    std::string name;
    bool turnCompleted;
    void SetProfile(char Name);
};
首先,

您不是在创建名为test的类Token的实例,而是声明一个返回Token的函数test()

其次,您可以尝试将指针转换为Token,而不是对象实例,因此您应该获取地址:

void test()
{
     Token test;
     Actor* check = dynamic_cast<Actor*>(&test);
}

第三,你说Actor继承自Token,但Token没有任何虚函数,所以你不能在上面使用dynamic_cast。在你的情况下,一个很好的候选者是Token的析构函数。