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:二进制 '操作符==' 有太多的参数
C2333 :'sq_list :: operator ==':函数声明中的错误;跳过功能体
C2143:语法错误:缺少';' '*'前
C4430:缺少类型说明符 - 假定为int。注意:C++不支持默认int

我试图改变周围的事情,但我constanly得到同样的错误如上

任何提示或这种援助是极大的赞赏。

+0

你需要sqlist Flexo 2012-02-18 00:55:26

+0

如果它是一个成员函数,它需要一个艺术,并使用这个 – Flexo 2012-02-18 00:56:44

+0

@awoodland:不,你不需要;在类模板定义中,仅模板名称可以引用当前模板实例。无论如何,OP的代码中没有'T'。 – 2012-02-18 00:58:13

回答

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;

0

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

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

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

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