【问题标题】:Errors risen on std::find over a vector of objectsstd::find 在对象向量上出现错误
【发布时间】:2013-11-02 15:24:11
【问题描述】:

在这个函数中,我想在向量队列中搜索“顶点”。

bool PriorityQueue::contains(VertexPriority vertex) const {
     return (std::find(queue.begin(), queue.end(), vertex) != queue.end());
}

向量队列是这个对象的一个​​实例:

std::vector<VertexPriority> queue;

我的运算符重载是这样的:

bool operator==(const VertexPriority& v){ return (v.vertex == vertex); }

我该如何解决这个错误?

上升的错误是下一个错误,并且在每个错误的开头都有以下路径:

C:\Dev-Cpp\include\c++\3.4.2\bits\stl_algo.h

在函数 `_RandomAccessIterator std::find(_RandomAccessIterator, _RandomAccessIterator, const _Tp&, std::random_access_iterator_tag) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator >>, _Tp = VertexPriority]':

实例化自 `_InputIterator std::find(_InputIterator, _InputIterator, const _Tp&) [with _InputIterator = __gnu_cxx::__normal_iterator >>, _Tp = VertexPriority]'

传递 `bool VertexPriority::operator==(const VertexPriority&)' 的 const VertexPriority' asthis' 参数会丢弃限定符

【问题讨论】:

  • no match for 'operator=='你实现在VertexPriority>
  • 您是否在边列表中找到顶点?!
  • 不抱歉,我写错了这个问题的文字,现在我会编辑
  • 刚才实现了算子重载,编辑了问题

标签: c++ vector compiler-errors iteration std


【解决方案1】:

使运算符为常量:

bool operator==(const VertexPriority& v) const 
{ 
    return (v.vertex == vertex); 
}

请注意,这会生成成员函数 const 本身,这使编译器能够在 VertexPriority 类型的 const 对象上调用它。

这实际上正是编译器所说的:

passing const VertexPriority' as this' argument of `bool VertexPriority::operator==(const VertexPriority&)' discards qualifiers

作为 const 的 VertexPriority 对象正在作为 隐式 thisargument 传递给成员函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 1970-01-01
    • 2022-10-31
    • 1970-01-01
    • 2014-07-12
    • 2010-10-10
    • 2012-01-25
    相关资源
    最近更新 更多