2013-02-17 59 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