gpt4 book ai didi

c++ - 将自定义运算符 < 与 std::less 一起使用时出错

转载 作者:太空狗 更新时间:2023-10-29 23:29:10 26 4
gpt4 key购买 nike

我正在尝试使 < 过载运算符(operator),但遇到了问题。

这是我的实现:

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/bits/stl_function.h: In member function ‘bool std::less<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp = ns3::Vector3D]’:
/usr/include/c++/4.1.2/bits/stl_map.h:347: instantiated from ‘_Tp& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const _Key&) [with _Key = ns3::Vector3D, _Tp = std::vector<const ns3::olsr::NeighborTuple*, std::allocator<const ns3::olsr::NeighborTuple*> >, _Compare = std::less<ns3::Vector3D>, _Alloc = std::allocator<std::pair<const ns3::Vector3D, std::vector<const ns3::olsr::NeighborTuple*, std::allocator<const ns3::olsr::NeighborTuple*> > > >]’
../src/routing/olsr/olsr-routing-protocol.cc:853: instantiated from here
/usr/include/c++/4.1.2/bits/stl_function.h:227: error: passing ‘const ns3::Vector3D’ as ‘this’ argument of ‘int ns3::Vector3D::operator<(const ns3::Vector3D&)’ discards qualifiers

最佳答案

错误

passing ‘const ns3::Vector3D’ as ‘this’ argument of ‘int ns3::Vector3D::operator<(const ns3::Vector3D&)’ discards qualifiers

表示你的operator<不 promise 比较不会修改左侧参数,而 map 要求比较操作不应该修改任何东西,并试图将此运算符用于常量实例( map 存储键类型作为 const 对象)。

简而言之,此类运算符重载不得改变任何内容,并且两个操作数都必须声明为 const。由于您已将 this 作为成员函数重载,因此您必须使函数本身成为常量。

bool operator<(const ns3::Vector3D& rhs) const;

顺便说一句,你为什么不返回一个 bool 值(结果必须是真或假)?

关于c++ - 将自定义运算符 < 与 std::less 一起使用时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3717282/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com