【问题标题】:C++ Output of a map with Pointers [closed]带有指针的地图的 C++ 输出 [关闭]
【发布时间】:2014-05-25 14:08:13
【问题描述】:

我正在尝试在我的地图中打印输入

map<string, Ort*> Hashtable; 

密钥是一个字符串(城市的邮政编码) Objekt Ort* 包含名称(字符串)和 x,y 坐标(双精度)。

我尝试打印地图:

    for (it = Hashtable.begin(); it != Hashtable.end(); it++) {
        cout << it->first << " " << it->second->GetOrtsname()
                << " (" << it->second->GetPosX() << " " << it->second->GetPosY() << ")" << endl;
    }

错误输出:

error: no match for ‘operator=’ (operand types are ‘std::map<std::basic_string<char>, Ort*>::iterator {aka std::_Rb_tree_iterator<std::pair<const std::basic_string<char>, Ort*> >}’ and ‘std::map<std::basic_string<char>, Ort*>::const_iterator {aka std::_Rb_tree_const_iterator<std::pair<const std::basic_string<char>, Ort*> >}’)
             for (it = Hashtable.begin(); it != Hashtable.end(); it++) {

看来我是盲目地真正阅读错误输出 感谢 juanchopanza

解决方案:

map<string, Ort*>::const_iterator it;

【问题讨论】:

  • 您需要将it 设为const_iterator
  • 非常感谢 juanchpanza 你能解释一下为什么“它”需要是一个 const_iterator 吗?
  • 因为您的地图是const,或者您正在通过const 引用访问它。

标签: c++ map stl iterator output


【解决方案1】:

错误

错误:'operator=' 不匹配(操作数类型为 'std::map&lt;std::basic_string&lt;char&gt;, Ort*&gt;::iterator {又名 std::_Rb_tree_iterator&lt;std::pair&lt;const std::basic_string&lt;char&gt;, Ort*&gt;&gt;}' 和'std::map&lt;std::basic_string&lt;char&gt;, Ort*&gt;::const_iterator {aka std::_Rb_tree_const_iterator&lt;std::pair&lt;const std::basic_string&lt;char&gt;, Ort*&gt; &gt;}')

指的是这种说法:

it = Hashtable.begin()

它告诉您= 的 RHS 上的表达式类型与 LHS 的类型之间没有有效的转换。右轴是...const_iterator,左轴是....iterator

原因很可能是Hashtableconst 映射的const 引用之一。拨打const overload of begin() 时,您会收到const_iterator。这是不允许您修改 const 映射内容的机制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    相关资源
    最近更新 更多