【问题标题】:Can`t iterate over set不能迭代集合
【发布时间】:2012-08-13 05:54:36
【问题描述】:

我需要帮助。尝试迭代集合时出现以下错误:

错误 1 ​​错误 C2440:“正在初始化”:无法从 'std::_Tree_const_iterator<_mytree>' 到 'compound_objectNS::Compound_object *' c:\program 文件 (x86)\microsoft visual studio 10.0\vc\include\xmemory 208

我得到以下代码: 从文件“compound_object.cpp”中提取:

typedef compound_objectNS::Compound_object OBJECT
    bool OBJECT::operator== (const Compound_object &object) const
    {
        return this == &object;
    }

    bool OBJECT::operator< (const Compound_object &object) const
    {
        return this->m_numberOfObject < object.m_numberOfObject;
    }

这里允许 set 对其元素进行排序,我覆盖了运算符“==”和“

客户端文件:

for (objectImitatorNS::set<compound_objectNS::Compound_object*>::iterator it = Objects->begin();
        it != Objects->end(); ++it)
    {
        this->m_imitatedObjects->insert(it);
    }

我发现行时会引发错误

this->m_imitatedObjects->insert(it)

已执行。

如何解决这个问题?

【问题讨论】:

    标签: c++ stl iterator set


    【解决方案1】:

    std::set::insert(带一个参数的版本)不带迭代​​器。它需要一个值。 See here。你可以试试:

    this->m_imitatedObjects->insert(*it);
    

    【讨论】:

    • insert 确实可以“采用迭代器”,只是不在 OP 正在寻找的重载中......(例如 insert(it, 0) 会“工作”)。
    • 是的,当然。我已经编辑说带一个参数的版本不带迭代器。
    【解决方案2】:

    this-&gt;m_imitatedObjects-&gt;insert(*it);。您正在插入

    【讨论】:

      【解决方案3】:

      你必须插入值而不是迭代器 obj。

      【讨论】:

        猜你喜欢
        • 2019-08-22
        • 2022-07-05
        • 2011-04-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-23
        • 2021-10-22
        • 2015-12-17
        相关资源
        最近更新 更多