gpt4 book ai didi

c++ - 在类中重载 < 运算符

转载 作者:搜寻专家 更新时间:2023-10-31 00:44:03 25 4
gpt4 key购买 nike

我正在尝试使用一个简单的结构作为映射键:

class Foo{
.
.
.
struct index{
int x;
int y;
int z;
};

bool operator<(const index a, const index b);
.
.
.
}

函数本身:

bool Foo::operator<(const index a, const index b){
bool out = True;
if (a.x == b.x){
if (a.y == b.y){
if (a.z >= b.z) out = false;
}
else if(a.y > b.y) out = false;
} else if (a.x > b.x) out = false;
return out;
}

但是,当我编译时出现错误:

memMC.h:35: error: 'bool Foo::operator<(Foo::index, Foo::index)' must take exactly one argument

据我了解,编译器希望将 index 与此 Foo 进行比较。那么我该如何重载运算符呢?

最佳答案

如果你想比较两个索引,将重载移动到 index 结构中:

struct index{
int x;
int y;
int z;
bool operator<(const index& a) const;
};

如果你想比较一个 Foo 和一个 index(我对此表示怀疑,但为了以防万一,我还是把它放在这里),删除第二个参数,因为不需要:

class Foo{
//...
bool operator<(const index& a) const;
};

请注意,您应该通过引用传递 index 参数,以防止不必要的复制。

编辑:正如 Als 正确指出的那样,这个运算符应该是 const

关于c++ - 在类中重载 < 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9500720/

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