c++地图值不改变运行时,我做错了什么

C++ map values not changing on run time, what am I doing wrong?

本文关键字:错了 什么 运行时 地图 改变 c++      更新时间:2023-10-16

我在游戏的全局类中有一个名为realMap的地图。它用于在地图中存储变量,只要realMap在范围内,游戏中的所有对象都可以访问这些变量。基本上就像Gamemaker中的global.。因此,map中的所有内容都是在运行时存储的。

这是映射初始化代码std::map<const char*, Real> realMap;(Real在另一个声明给double的文件中)

在我的播放器对象中,当它开始时,播放器开始globalObject.realMap["playerDead"] = false;

检查它是否等于0

但是当玩家死亡时,它应该将地图键设置为true,但它没有。我做了一个显示消息来检查它的值,它仍然是0。下面是代码:

ObjGlobal->realMap["playerDead"] = true;
Real tempVal = ObjGlobal->realMap.at("playerDead");
agk::Message(agk::Str(int(tempVal)));

如我所说,agk::Message显示0。

我做错了什么?我对映射还是个新手,对c++也是个新手,所以很抱歉,如果这是一个愚蠢的错误。

Thanks in advance

您使用指向字符串文字的指针作为映射的键,但是您的代码中有两个不同的"playerDead"字符串。除非你的链接器将两个字符串优化为相同的指针(许多链接器都会这样做,但不必这样做),否则键实际上最终会不同。

如果您将映射定义更改为std::map<std::string, Real>,它应该按预期工作,因为键实际上将基于字符串的内容而不是其在内存中的地址。