首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误使用自定义operator<与std::

错误使用自定义operator<与std::
EN

Stack Overflow用户
提问于 2010-09-15 11:49:04
回答 2查看 1.8K关注 0票数 2

我试图重载<操作符,但遇到了一个问题。

以下是我的实现:

代码语言:javascript
复制
int Vector3D::operator < (const Vector3D &vector)
{
   if(x<vector.x)
       return 1;
   else
       return 0;
}

我使用以下代码调用它:

代码语言:javascript
复制
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’参数传递,丢弃限定符

EN

回答 2

Stack Overflow用户

发布于 2010-09-15 11:54:26

误差

将‘ConstNS3::Vector3D’作为int ns3::Vector3D::operator<的‘this’参数传递(const NS3::Vector3D&)丢弃限定符

指示您的operator<不会承诺比较不会修改左边的参数,而映射要求比较操作不应该修改任何内容,并试图将此运算符用于常量实例(映射将键类型存储为const对象)。

简而言之,这种操作符重载不能改变任何东西,这两个操作数都必须声明为const。当您将它重载为一个成员函数时,您必须使该函数本身成为const。

代码语言:javascript
复制
bool operator<(const ns3::Vector3D& rhs) const;

顺便问一下,你为什么不返回一个bool (结果必须是真还是假)?

票数 13
EN

Stack Overflow用户

发布于 2010-09-15 11:53:46

看起来您需要使用const_iterators:

邻居集::迭代器

应该是

NeighborSet::const_iterator

此外,如果您的编译器支持它(C++0x),则使用cbegin和cend而不是begin和end。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3717282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档