【问题标题】:C++ iterator mismatch errorC++ 迭代器不匹配错误
【发布时间】:2017-07-25 08:19:37
【问题描述】:

我正在跟踪我的类的实例是否使用 std::vector 来存储指向所有类对象的指针。我正在收拾东西并想删除析构函数中的指针......但我收到以下错误:

Brazos.cpp:15:89: 错误:无法将 'std::vector::iterator {aka __gnu_cxx::__normal_iterator >}' 转换为 'const char*' for argument '1' to 'int remove(const char *)' instanceAddress.erase(std::remove(instanceAddress.begin(), instanceAddress.end(), this) instanceAddress.end());

看来我可能需要取消对迭代器的引用...这是我的代码:

std::vector<Brazos*> Brazos::instanceAddress;

Brazos::Brazos(Mano mano)
{
  instanceAddress.push_back(this);
  _mano = mano;
}

Brazos::~Brazos(void)
{
  instanceAddress.erase(std::remove(instanceAddress.begin(), instanceAddress.end(), this) instanceAddress.end());
}

【问题讨论】:

  • 奇怪的语法 "instanceAddress.erase( some-id some-id ); ?我的第一个猜测是添加逗号。我不确定。如果你发布一个独立的几乎可编译的测试 -在ideone.com 或类似站点的情况下,将更容易识别问题。

标签: c++11 vector


【解决方案1】:

你少了一个逗号:

instanceAddress.erase(std::remove(instanceAddress.begin(), instanceAddress.end(), this), instanceAddress.end());
                                                                                       ^

此外,错误消息指的是int std::remove(const char*),因此请确保#include &lt;algorithm&gt; 具有正确的std::remove

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-26
    • 2015-06-28
    • 2017-10-10
    • 2012-06-18
    • 1970-01-01
    • 1970-01-01
    • 2011-12-10
    相关资源
    最近更新 更多