gpt4 book ai didi

c++ - 为什么 typeid 总是返回 false?

转载 作者:行者123 更新时间:2023-11-30 05:29:03 24 4
gpt4 key购买 nike

所以我必须为一个项目制作一个基于文本的视频游戏。我创建了一个名为“tile”的类,然后创建了一个名为“wall”的子类。然后我制作了如下所示的一系列瓷砖。中间的瓷砖 B2 是一面墙。当我比较 typeid(B2)==typeid(wall) 时,它返回 false,即使 tile B2 是 wall 类型。 “fighter”类有一个 x 和一个 y 组件。

  //Initiate map
const int rows = 3;
const int cols = 3;
tile A1, A2, A3, B1, B3, C1, C2, C3;
fighter wizard(1, 2, 6, ft::mage, 100);
C3 = tile(wizard, "There's all this magic stuff everywhere.");
wall B2= wall("A wall blocks your path.");
tile map[rows][cols] = {{A1, A2, A3},
{B1, B2, B3},
{C1, C2, C3}};
...

fighter player1(0, 0, 0, ft::warrior);

...

string input = "";
while(input!="quit")
{
cin >> input;
if (input == "left") {
if (typeid(map[player1.y][player1.x - 1]) == typeid(wall))
cout << map[player1.y][player1.x - 1].scene;

最佳答案

tile map[rows][cols]

存储瓦片对象。如果您要检查这些对象,您会发现它们属于 tile 类。不是原始 B2 对象 wall 的类型。所以

if (typeid(map[player1.y][player1.x - 1]) == typeid(wall))

将始终比较tile == wall

如果您对保留动态类型感兴趣,您需要使用(智能)指针或任何引用原始对象的方式。这些对象需要具有动态类型/具有虚函数。

另见 What is dynamic type of object

关于c++ - 为什么 typeid 总是返回 false?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36562169/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com