7

我目前正在为 == 运算符创建一个重载函数。我正在为我的链接列表创建一个 hpp 文件,但我似乎无法让这个运算符在 hpp 文件中工作。

我目前有这个:

template <typename T_>
class sq_list 
{

bool operator == ( sq_list & lhs, sq_list & rhs) 
{
    return *lhs == *rhs;
};

reference operator * ()     {
        return _c;
    };

};
}

我收到大约 10 个错误,但它们几乎重复错误:

C2804: 二进制 'operator ==' 有太多参数
C2333:'sq_list::operator ==' : 函数声明错误;跳过函数体
C2143:语法错误:缺少“;” 在 '*'
C4430 之前:缺少类型说明符 - 假定为 int。注意:C++ 不支持默认整数

我试过改变周围的东西,但我总是遇到与上面相同的错误

非常感谢您对此的任何提示或帮助。

4

3 回答 3

7

成员运算符只有一个参数,即另一个对象。第一个对象是实例本身:

template <typename T_>
class sq_list 
{
    bool operator == (sq_list & rhs) const // don't forget "const"!!
    {
        return *this == *rhs;  // doesn't actually work!
    }
};

这个定义实际上没有意义,因为它只是递归地调用自己。相反,它应该调用一些成员操作,例如return this->impl == rhs.impl;.

于 2012-02-18T00:55:29.193 回答
0

您将 == 重载声明为类定义的一部分,因为方法实例将获得。因此,您请求的第一个参数lhs, 已经是隐含的:请记住,在您可以访问的实例方法中this

class myClass {
    bool operator== (myClass& other) {
        // Returns whether this equals other
    }
}

作为类的一部分的 operator==() 方法应该被理解为“这个对象知道如何将自己与其他对象进行比较”。

您可以在类外部重载 operator==() 以接收两个参数,两个对象都被比较,如果这对您更有意义的话。见这里: http: //www.learncpp.com/cpp-tutorial/94-overloading-the-comparison-operators/

于 2012-02-18T00:57:29.750 回答
0

http://courses.cms.caltech.edu/cs11/material/cpp/donnie/cpp-ops.html

比较运算符非常简单。首先定义 ==,使用如下函数签名:

  bool MyClass::operator==(const MyClass &other) const {
    ...  // Compare the values, and return a bool result.
  }

如何比较 MyClass 对象是您自己的事。

于 2012-02-18T01:34:57.560 回答