比较以下结构的两个实例,我收到错误:
struct MyStruct1 {
Position(const MyStruct2 &_my_struct_2, const int _an_int = -1) :
my_struct_2(_my_struct_2),
an_int(_an_int)
{}
std::string toString() const;
MyStruct2 my_struct_2;
int an_int;
};
错误是:
错误C2678:二进制'==':没有运算符 发现哪个采用左手操作数 类型'myproj :: MyStruct1'(或者那里 是不可接受的转换)
为什么?
答案 0 :(得分:115)
在C ++中,struct
没有默认生成的比较运算符。你需要自己编写:
bool operator==(const MyStruct1& lhs, const MyStruct1& rhs)
{
return /* your comparison code goes here */
}
答案 1 :(得分:77)
答案 2 :(得分:10)
您需要为operator ==
明确定义MyStruct1
。
struct MyStruct1 {
bool operator == (const MyStruct1 &rhs) const
{ /* your logic for comparision between "*this" and "rhs" */ }
};
现在==比较对于2个这样的对象是合法的。
答案 3 :(得分:2)
比较不适用于C或C ++中的结构。比较字段。
答案 4 :(得分:2)
从C ++ 20开始,应该可以通过声明default three-way comparison operator向类添加全套默认比较运算符(==
,<=
等)。 (“太空飞船”运算符),就像这样:
struct Point {
int x;
int y;
auto operator<=>(const Point&) const = default;
};
使用兼容的C ++ 20编译器,假设MyStruct2的定义兼容,那么将该行添加到MyStruct1和MyStruct2可能足以进行相等比较。
答案 5 :(得分:1)
默认情况下,结构体没有==
运算符。你必须编写自己的实现:
bool MyStruct1::operator==(const MyStruct1 &other) const {
... // Compare the values, and return a bool result.
}
答案 6 :(得分:0)
开箱即用,==运算符仅适用于基元。要使代码生效,需要重载结构的==运算符。
答案 7 :(得分:0)
因为您没有为结构编写比较运算符。编译器不会为你生成它,所以如果你想进行比较,你必须自己编写它。