我正在编译一些依赖于包含防护的代码来防止对象和函数的多重定义,但Visual Studio 2008给我的链接错误有多个定义。我不明白为什么,因为我以前使用的代码非常类似,并且没有造成问题。我一定在做些愚蠢的事情,但我不知道它是什么。我也尝试去掉包含卫士并使用#pragma一次,但我得到相同的链接错误。我应该检查什么?为什么不包括曾经工作的警卫或杂注?
9
A
回答
17
如果它们是链接器错误,最可能的原因可能是标头中定义的非内联函数。
如果在包含在多个源文件中的头中有一个非内联函数,它将在每个源文件(“翻译单元”)中定义,因此该函数将被定义为多于一次,因此多重定义错误。
0
如果你遇到链接器错误...你确定你不是1)在代码中实际定义一个函数两次或2)试图做一些愚蠢的事情,如源文件(与头文件相反)#include
)?
0
这也可能是由于使用链接其他库的不同版本的cstd库引起的。请在C++/Code生成部分下检查并确保所有项目都使用相同的设置。
相关问题
- 1. #pragma曾经或包括不在外部funcs工作的卫兵
- 2. C++包括警卫不出现工作?
- 3. 标题/包括警卫不工作?
- 4. 为什么在C++中不包括警卫?
- 5. 有什么情况下你不想包括警卫?
- 6. SAS宏包括警卫
- 7. 为什么这不包括工作?
- 8. 米斯拉警告为包括后卫
- 9. 内部和外部杂注之间的区别是否包括警卫?
- 10. 为什么不dismissWithClickedButtonIndex曾经调用clickedButtonAtIndex?
- 11. 包含问题和包括警卫
- 12. C++包括警卫似乎没有工作
- 13. 类型是不完整的,因为包括警卫
- 14. 什么FILE_H堪称包括后卫
- 15. 函数包括随机性和警卫
- 16. 包括警卫不工作? (在y.obj中已经定义了500个类型的LNK2005 x错误)
- 17. JSON.NET:为什么使用JToken - 曾经?
- 18. 为什么包括bom不起作用?
- 19. 为什么我的../在我的包括不工作
- 20. 为什么一些包括卫兵有定义的价值?
- 21. 为什么我的jQuery Mobile包括显然不工作?
- 22. 为什么在laravel中使用警卫?
- 23. Laravel什么是警卫?
- 24. 为什么此警报不工作
- 25. 为什么重复报警不工作?
- 26. 为什么messsage来排队,但不处理?它曾经工作过。 nservicebus是否需要注册?
- 27. 为什么EF预加载包括不按预期工作?
- 28. 为什么这包括不能在jsp中工作?
- 29. 曾经工作过的SQL查询不再工作
- 30. C包括卫兵
是的,你是对的...哎呀。谢谢! – Stewart 2009-11-24 04:52:18
你也可以通过制作模板来使它们变成弱符号 – 2009-12-09 10:39:33