1
I tried to overload the operator !=

    struct Antichoc 
    { 
        quint8 Chariot; 
        quint8 Frittage;

    bool operator!=(const Antichoc &a, const Antichoc &b) 
    { 
        return a.Chariot != b.Chariot || a.Frittage != b.Frittage; 
    }
    }

我得到错误:

bool Antichoc::operator!=(const Antichoc&, const Antichoc&) 必须只有一个参数

为什么这个错误

4

1 回答 1

6

非静态成员函数采用隐式隐藏的第一个参数和指向相同类型的指针。所以你的成员操作符实际上有三个参数,它应该有两个。

您可以将其设为非成员运算符:

struct Antichoc { .... };

bool operator!=(const Antichoc &a, const Antichoc &b) 
{ 
    return a.Chariot != b.Chariot || a.Frittage != b.Frittage; 
}

或者让它成为只接受一个论点的成员。

struct Antichoc 
{ 
    quint8 Chariot; 
    quint8 Frittage;

  bool operator!=(const Antichoc& rhs) const 
  { 
    return Chariot != rhs.Chariot || Frittage != rhs.Frittage; 
  }
};

第一个版本将允许隐式转换为Antichoc,这在此特定示例中不是必需的。

通常!=,根据==.

请注意,在 C++11 中,您可以使用以下方法简化所有这些逻辑运算符std::tie

#include <tuple>

bool operator!=(const Antichoc &a, const Antichoc &b) 
{ 
    return std::tie(a.Chariot, a.Frittage) != std::tie(b.Chariot, b.Frittage); 
}
于 2013-06-10T09:33:48.760 回答