【问题标题】:overloading << with duplicate symbol linking error重载 << 重复符号链接错误
【发布时间】:2013-02-17 17:41:34
【问题描述】:

我的头快要爆炸了。我不明白我在尝试用两个类(punto 和 vector)重载 '

   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;
    }

错误出现在链接步骤中,并且没有与类头的双重链接,因为它是一个非常简单的示例。

【问题讨论】:

  • 不要将该代码放在标题中。只将声明放在标题中,并将实现放在一个(并且只有一个).cpp 文件中。
  • 如果这个例子这么简单,也许你不会介意把它完整地呈现给我们。
  • 无关:您可以复制/粘贴控制台的输出,而不必截屏。

标签: c++ operator-overloading


【解决方案1】:

这个特殊的错误意味着一个函数被编译成两个不同的翻译单元。如果您将函数定义放在头文件中并将其包含到两个不同的源文件中,则很可能会发生这种情况。

从广义上讲,您有两种解决方案:

  1. 在标题中声明,不要定义您的函数。在源文件中定义(实现)它。
  2. 将您的函数声明为静态或内联。

【讨论】:

  • 感谢您真正解释解决方案。真是愚蠢的错误。
猜你喜欢
  • 1970-01-01
  • 2012-04-10
  • 1970-01-01
  • 1970-01-01
  • 2011-02-26
  • 2014-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多