2013-02-17 40 views
3

我的頭靠近爆炸。我不明白,我做錯了嘗試用兩個類(punto和vector)超載'< <'運算符。下面是代碼,代碼寫在類的頭文件出的類:在連接步驟重載<< with duplicate symbol linking error

std::ostream& operator << (ostream& salida, const punto& origen) 
    { 
     // Se escriben los campos separados por el signo 
     salida << "Punto --> x: " << origen.xf << " , y: " << origen.yf; 
     return salida; 
    } 

    std::ostream& operator << (ostream& salida, const vector& origen) 
    { 
     // Se escriben los campos separados por el signo 
     salida << "Punto --> x: " << origen.p1.xf << " , y: " << origen.p1.yf; 
      return salida; 
    } 

錯誤去,並沒有與類的頭沒有雙鏈接,因爲這是一個很簡單的例子。

enter image description here

+3

不要將該代碼放在標題中。只將聲明放在標題中,並將實現放在一個(且只有一個).cpp文件中。 – Mat 2013-02-17 17:43:18

+0

如果這個例子非常簡單,那麼您可能不會介意將其全部呈現給我們。 – 2013-02-17 17:44:14

+0

無關:您可以複製/粘貼控制檯的輸出,而不必截取屏幕截圖。 – 2013-02-17 17:45:54

回答

6

此特定錯誤意味着一個函數被編譯成兩個不同的翻譯單元。如果將函數定義放入標題並將其包含到兩個不同的源文件中,最有可能發生這種情況。

你有,從廣義上講,兩種解決方案:

  1. 申報,沒有定義,你在頭功能。在源文件中定義(實現)它。
  2. 聲明您的函數爲靜態或內聯。
+0

感謝您解釋真正的上帝。真是愚蠢的錯誤。 – 2013-02-17 18:03:43