2015-08-15 14 views
0

我在我的遊戲的全局類中有一個叫做realMap的地圖。它用於在地圖中存儲變量,只要realMap在範圍內,遊戲中的所有對象都可以訪問它們。基本上像Gamemaker中的global.。因此,地圖中的所有內容都是在運行時存儲的。C++映射值在運行時不會改變,我做錯了什麼?

這是地圖初始化代碼 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 ::消息顯示0

我在做什麼錯?我對地圖仍然陌生,對於C++來說還是一個新的東西,所以如果這是一個愚蠢的錯誤,那麼很抱歉。

在此先感謝

+1

爲什麼使用'Real'('double ....')來存儲布爾值???!? – Amit

回答

3

您使用一個指向字符串字面量爲重點,以地圖,但你必須在你的代碼的兩個不同"playerDead"字符串。除非你的鏈接器正在將兩個字符串優化爲相同的指針(許多鏈接器所做的優化 - 但不必),否則這些鍵實際上最終會不同。

如果將地圖定義更改爲std::map<std::string, Real>,它應該按預期工作,因爲密鑰實際上將基於字符串的內容而不是內存中的地址。

+0

非常感謝!我從來沒想過那個。 – null