我正在尝试编译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中定义
有人知道为什么不编译吗?
答案 0 :(得分:3)
如果您在头文件中定义了运算符,则必须将其声明为inline
,否则将在包含该标题的所有翻译单元中定义。
但是将它移动到实现文件可能会更好,除非你有充分的理由将它放在标题中。
答案 1 :(得分:0)
对我来说,这个错误与多个定义有关,我根据微软的建议解决了这个错误。在项目属性中=&gt; Linker =&gt;命令行=&gt; “附加选项”文本框添加命令“/ FORCE:MULTIPLE”。这解决了我的问题。 (https://msdn.microsoft.com/en-us/library/70abkas3.aspx)