2013-09-11 42 views
0

起初我在頭文件中寫了一個非成員的==操作符的功能在這個風格:非會員運營商==我可以讓它成爲靜態嗎?

bool operator==(
    const Node& lhs, 
    const Node& rhs) 
{ 
    return lhs.uid == rhs.uid; 
} 

但它編譯失敗的原因,它的多個定義。 我嘗試了兩種方法,它們都起作用。 1將實現移至cpp文件 2使此運算符==靜態函數。

大部分搜索結果都是關於第一個解決方案的。 但我可以使它靜態?哪一個更好?

在此先感謝〜

+0

當你說多個定義時,代碼中是否有這個函數的其他實例?你可以發佈他們嗎? – zero298

+0

可能重複[運算符在類外重載!](http://stackoverflow.com/questions/4121125/operator-overloading-outside-of-a-class) –

+0

我把這個頭文件包含在其他源文件中 – Dan

回答

4

如果你已經把函數在頭文件,你需要使它inline。否則,編譯器會在任何使用它的源文件中分出一個單獨的副本,導致鏈接器衝突。

inline bool operator==(
    const Node& lhs, 
    const Node& rhs) 
{ 
    return lhs.uid == rhs.uid; 
} 
+0

是的,如果我將它內聯,它也可以正常工作!謝謝! – Dan

+0

對於像這樣的簡單實現,內聯更好,尤其是如果您希望經常調用該函數(例如對容器進行排序時)。 – 2013-09-11 04:00:56

相關問題