我有一个VS10解决方案,其中包含2个具有相同名称功能的项目。链接器抱怨(引发警告)第二个定义(相同名称的两个函数)被忽略:

warning LNK4006: "void __cdecl function_name(short *,class Bbox *,int,int,struct FILE_NAMES *,unsigned char *)" (?function_name@@YAXPAFPAVBbox@@HHPAUFILE_NAMES@@PAE@Z) already defined in XXX.lib(segment.obj); second definition ignored


这导致对第二个项目(被忽略的项目)的函数的调用指向第一个项目的功能(因为定义被忽略)。

我的问题是:除了重命名两个项目中所有具有相同名称的功能之外,还有什么方法可以避免/解决此问题?例如,通过将#if / pragma添加到我的头文件中,或通过操作.obj文件。现实情况是,该解决方案在任何编译中都只需要两个项目之一,因此有条件编译的一种简便方法就很好了,但是我的首选是将两个项目一起编译。

最佳答案

这违反了One Definition Rule的规定,在整个程序中只能存在一个关于tempate,类型,函数或对象的定义。要解决此问题,请按名称或参数重载使两个函数的签名唯一,以将它们放置在不同的名称空间中,或者如果您同时需要两个库,请使用条件编译。

关于c++ - 具有相同名称功能的具有不同项目的Visual Studio解决方案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16678441/

10-11 22:24
查看更多