2011-11-15 77 views
1

我有以下代碼:C++ STL地圖迭代器輸出值的十六進制

map<StatTypesEnum, ValueHandler*>::const_iterator itr; 

for(itr=player1->Stats.begin(); itr!=player1->Stats.end(); itr++) 
{ 
    cout << "Stat: " << itr->first << " Value: " << (ValueHandler*)(itr->second)->getValue() << endl; 
} 

的的getValue()方法返回一個int。如果我在迭代器外面查找值,它將顯示爲base10 decimal,但是當我使用迭代器(如上所示)返回值時,它將顯示在base16,hex中。

只是爲了保持完整性,下面一行顯示爲base10:

cout << player1->Stats[Power]->getValue() << endl; 

我想迭代器顯示base10。

謝謝。

回答

6

當你打印(ValueHandler*)(itr->second)->getValue()你應該得到一個十六進制值,因爲這是如何打印指針。您可能不應該將getValue()的返回值轉換爲ValueHandler*。您可能打算將itr->second轉換爲該指針類型(儘管這不是必需的),但剛剛得到括號錯誤。這裏的鑄造itr->second會是什麼樣子:

((ValueHandler*) itr->second)->getValue() 

,你想要什麼可能是:

itr->second->getValue() 
+0

是的 - 更簡單 - 出於某種原因,我認爲我需要投它itr->秒,但它已經是正確的類型。 - 謝謝 – IUnknown

1

(ValueHandler*)(itr->second)->getValue()是一個指針,而不是一個int。您正在鑄造getValue的返回值。

也許你想((ValueHandler*)(itr->second))->getValue()?無論如何,這是多餘的。

+0

是啊 - 又在括號失去了 - 感謝 – IUnknown

+0

你並不需要在所有投這一個,迭代器知道它是哪種類型。 – littleadv

+0

Gotcha感謝 - 是的,在bames53的答案中看到了。 – IUnknown