c ++重载==运算符需要一个和两个参数

时间:2013-03-10 01:48:20

标签: c++ overloading operator-keyword

我正在尝试在我正在做的项目中重载==运算符。声明和定义是:

friend bool operator==(const TradeItem& item);

bool TradeItem::operator==(const TradeItem& item)

当我编译它时,它说:'bool operator ==(const TradeItem&)'必须正好两个参数。所以我重做它有两个这样的论点:

friend bool operator==(const TradeItem& i1, TradeItem& i2);

bool TradeItem::operator==(const TradeItem& i1, TradeItem& i2)

但是当我编译它时它告诉我它只需要一个参数....谈论给我一个解决方法。有谁知道什么出错了?

4 个答案:

答案 0 :(得分:6)

问题在于:

friend bool operator==(const TradeItem& item);

需要两个参数:

bool TradeItem::operator==(const TradeItem& item)

需要一个参数。

这是因为operator==的非成员版本总是需要两个,而成员版本需要一个。您的朋友声明声明非成员运算符重载。

class C {
    friend bool operator==(const C &lhs, const C &rhs);
public:
    bool operator==(const C& rhs);
};

bool operator==(const C &lhs, const C &rhs) { return true; }

bool C::operator==(const C& rhs) { return true; }

如果您需要在左侧允许类型转换,您只需要使用两个成员版本。 E.g:

bool operator==(int lhs, const C &rhs);
bool operator==(double lhs, const C &rhs);

10 == C();
3.0 == C();

你可能能够在没有宣布这些超载作为C的朋友的情况下离开。可能是这样的:

class C {
public:
    bool operator==(const C& rhs);
    bool operator==(int rhs);
    bool operator==(double rhs);
};

bool operator==(int lhs, const C &rhs) { return rhs == lhs; }
bool operator==(double lhs, const C &rhs) { return rhs == lhs; }

bool C::operator==(const C& rhs) { return true; }
bool C::operator==(int rhs) { return *this == convert_int_to_C(rhs); }
bool C::operator==(double rhs) { return *this == convert_double_to_C(rhs); }

此外,由于检查相等性不应更改对象,因此应const限定成员函数:

class C {
    bool operator== (C const &rhs) const;
}

答案 1 :(得分:3)

请记住==是二元运算符。这意味着必须始终有两个参数。如果将operator==()重载为成员函数,则其中一个参数是隐式this,它将传递给每个成员函数。

在您的代码中,您声明一个全局operator==()函数,该函数是friend类的TradeItem。同时,您将operator==()定义为TradeItem成员。选一个;你不应该两个都做。

答案 2 :(得分:0)

运算符==的类成员版本接受一个参数,而友元版本接受两个参数,因此它应该是这样的:

friend bool operator==(const TradeItem& i1, TradeItem& i2);

bool TradeItem::operator==(const TradeItem& i )    

这是因为成员版本有一个隐藏的this参数。成员版本也将优先于好友版本。你应该选择其中一个。

答案 3 :(得分:0)

带有两个参数的operator ==重载不能是成员函数 - 将其声明为bool operator==(const T&, const T&)