为什么我不能动态播放这个对象?

时间:2014-12-17 22:02:25

标签: c++ dynamic-cast incomplete-type

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

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

的指针

我该如何解决这个问题?顺便说一句,Actor从Token继承。这是Tokens头文件中的代码。

#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);
};

1 个答案:

答案 0 :(得分:3)

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

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

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

第三,您说Actor继承自Token,但Token没有任何虚拟功能,因此您无法在其上使用dynamic_cast。在你的案例中,一个好的候选人是Token的析构函数。