为什么我不能将派生类对象存储在基类数组中然后进行动态转换? C++

问题描述

这是我在 StackOverflow 中的问题,我通常可以在网上找到我的问题的答案,但我无法解决这个问题。所以,我正在用 C++ 制作一个基于文本的游戏,我在其中使用了继承和多态性。我想将设备(派生)存储在项目(基础)清单中,并且它们使用 dynamic_cast 来获取派生类的属性。我做了一个小例子来代表我正在尝试做的事情。

#include <iostream>

using namespace std;

class Equipment {
    public:
    int i = 20;
    string s = "nothing here";
    Equipment(){};
    virtual ~Equipment(){};
};

class Weapon: public Equipment {
    public:
    int V = 900;
    Weapon(){};
};

int main2(Equipment* e) {
    Weapon& weapon3 = dynamic_cast<Weapon&>(*e);
    cout << weapon3.V << endl;
    return 0;
}

int setEquipment(Equipment* e) {
    Equipment &equipment = *e;

Weapon& weapon2 = dynamic_cast<Weapon&>(*e);

Equipment* inventory;
inventory = new Equipment[3];
inventory[0] = *e;

Equipment &equipment2 = inventory[0];

Equipment inventory2[3];
inventory2[0] = equipment;

Equipment *inventory3[3];
inventory3[0] = &equipment;
inventory3[1] = e;

cout << weapon2.V << endl;
cout << "METHOD A: "; // WORKS FINE
main2(&equipment);
// cout << "METHOD B: "; // DOESN'T WORK
// main2(&equipment2);
// cout << "METHOD C: "; // DOESN'T WORK
// main2(&inventory[0]);
// cout << "METHOD D: "; // DOESN'T WORK
// main2(&inventory2[0]);
cout << "METHOD E: "; // IT ALSO WORKS!!!!!!
main2(inventory3[1]); 
}

int main() {
    Weapon weapon1;
    setEquipment(&weapon1);
}

我想在我的代码中实现类似 METHOD C 的东西。我试图在我的实际代码中实现 METHOD E,但我收到了很多 bad_alloc 错误。 (所有对示例不起作用的方法都给我一个 std::bad_cast 错误)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...