我试图重载<操作符,但遇到了一个问题。
以下是我的实现:
int Vector3D::operator < (const Vector3D &vector)
{
if(x<vector.x)
return 1;
else
return 0;
}我使用以下代码调用它:
std::map<Vector3D, std::vector<const NeighborTuple *> > position;
std::set<Vector3D> pos;
for (NeighborSet::iterator it = N.begin(); it != N.end(); it++)
{
NeighborTuple const &nb_tuple = *it;
Vector exposition;
pos.insert (exposition);
position[exposition].push_back (&nb_tuple);
}但我知道这个错误:
/usr/include/c++/4.1.2/bit/stl_ function .h:在成员函数‘bool std::less<_Tp>::operator()(const _Tp&,const _Tp&)中,_Tp =NS3::Vector3D’:
/usr/include/c++/4.1.2/bit/stl_map.h:347:从‘_Tp& std::map<_Key,_Tp,_Compare,_Alloc>::operatorconst _Key& with _Key =NS3:Vector3D,_Tp = std::vector >,_Compare = std::less,_Alloc = std::allocator >>>‘
从这里实例化../src/routing/olsr/olsr-routing-protocol.cc:853:
/usr/include/c++/4.1.2/bits/stl_function.h:227:错误:将‘ConstNS3::Vector3D’作为‘int ns3::Vector3D::operator<(const NS3::Vector3D&)’的‘this’参数传递,丢弃限定符
发布于 2010-09-15 11:54:26
误差
将‘ConstNS3::Vector3D’作为int ns3::Vector3D::operator<的‘this’参数传递(const NS3::Vector3D&)丢弃限定符
指示您的operator<不会承诺比较不会修改左边的参数,而映射要求比较操作不应该修改任何内容,并试图将此运算符用于常量实例(映射将键类型存储为const对象)。
简而言之,这种操作符重载不能改变任何东西,这两个操作数都必须声明为const。当您将它重载为一个成员函数时,您必须使该函数本身成为const。
bool operator<(const ns3::Vector3D& rhs) const;顺便问一下,你为什么不返回一个bool (结果必须是真还是假)?
发布于 2010-09-15 11:53:46
看起来您需要使用const_iterators:
邻居集::迭代器
应该是
NeighborSet::const_iterator
此外,如果您的编译器支持它(C++0x),则使用cbegin和cend而不是begin和end。
https://stackoverflow.com/questions/3717282
复制相似问题