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/