c ++ stl map迭代器输出十六进制值

时间:2011-11-15 04:34:41

标签: c++ stl map iterator

我有以下代码:

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中,但是当我使用迭代器返回值时(如上所示),它显示在base16,hex。

为了完整起见,以下行显示为base10:

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

我希望迭代器显示base10。

感谢。

2 个答案:

答案 0 :(得分:6)

当您打印(ValueHandler*)(itr->second)->getValue()时,您应该获得十六进制值,因为这是指针的打印方式。您可能不应该将getValue()的返回值转换为ValueHandler*。您可能打算将itr->second强制转换为该指针类型(尽管没有必要),但只是将括号错误。这是铸造itr->second的样子:

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

你想要的可能是:

itr->second->getValue()

答案 1 :(得分:1)

(ValueHandler*)(itr->second)->getValue()是一个指针,而不是int。您正在转换getValue的返回值。

也许你想要((ValueHandler*)(itr->second))->getValue()?无论如何,这是多余的。