【问题标题】:c++ stl map iterators outputting values a hexc ++ stl映射迭代器输出值一个十六进制
【发布时间】:2011-11-15 04:34:41
【问题描述】:

我有以下代码:

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 十六进制显示。

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

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

我希望迭代器显示 base10。

谢谢。

【问题讨论】:

    标签: c++ stl map iterator


    【解决方案1】:

    当您打印(ValueHandler*)(itr-&gt;second)-&gt;getValue() 时,您应该得到一个十六进制值,因为这就是打印指针的方式。您可能不应该将getValue() 的返回值转换为ValueHandler*。您可能打算将itr-&gt;second 转换为该指针类型(尽管这不是必需的),但只是括号错误。以下是 itr-&gt;second 的投射效果:

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

    而你想要的可能是:

    itr->second->getValue()
    

    【讨论】:

    • 是的 - 更简单 - 出于某种原因,我认为我需要转换 itr->second 但它已经是正确的类型。 - 谢谢
    【解决方案2】:

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

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

    【讨论】:

    • 你根本不需要强制转换这个,迭代器知道它是哪种类型。
    猜你喜欢
    • 1970-01-01
    • 2011-04-02
    • 2011-05-01
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 2014-04-10
    • 2011-08-04
    • 1970-01-01
    相关资源
    最近更新 更多