【问题标题】:Why can't I dynamic_cast this object?为什么我不能 dynamic_cast 这个对象?
【发布时间】:2014-12-17 22:02:25
【问题描述】:
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);
};

【问题讨论】:

  • 在您的代码中,test 是一个函数。看起来您希望它是 Token*
  • 为什么要尝试将令牌函数转换为actor指针?

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


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-27
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多