1

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

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]'

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

4

1 回答 1

2

使运算符为 const:

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

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

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

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

VertexPriorityconst 对象作为隐式参数传递给成员this函数

于 2013-11-02T16:02:21.863 回答