在比较C ++中的结构时找不到==运算符

时间:2011-04-21 06:21:08

标签: c++ struct comparison-operators

比较以下结构的两个实例,我收到错误:

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'(或者那里   是不可接受的转换)

为什么?

8 个答案:

答案 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)

因为您没有为结构编写比较运算符。编译器不会为你生成它,所以如果你想进行比较,你必须自己编写它。