Microsoft重载<< Operator Sample抛出链接错误

时间:2012-01-29 13:28:24

标签: c++ visual-studio operator-overloading

我正在尝试编译Microsoft示例“Overloading the << Operator for Your Own Classes”但是出现以下链接错误:

  

错误LNK1169:找到一个或多个多重定义的符号

     

错误LNK2005:“class std :: basic_ostream&gt;&amp; __cdecl operator&lt;&lt;(class std :: basic_ostream&gt;&amp;,class Date const&amp;)”(?? 6 @ YAAAV?$ basic_ostream @ DU ?$ char_traits @ D @ std @@@ std @@ AAV01 @ ABVDate @@@ Z)已在Date.obj中定义

有人知道为什么不编译吗?

2 个答案:

答案 0 :(得分:3)

如果您在头文件中定义了运算符,则必须将其声明为inline,否则将在包含该标题的所有翻译单元中定义。

但是将它移动到实现文件可能会更好,除非你有充分的理由将它放在标题中。

答案 1 :(得分:0)

对我来说,这个错误与多个定义有关,我根据微软的建议解决了这个错误。在项目属性中=&gt; Linker =&gt;命令行=&gt; “附加选项”文本框添加命令“/ FORCE:MULTIPLE”。这解决了我的问题。 (https://msdn.microsoft.com/en-us/library/70abkas3.aspx