C++ 具有同名函数的不同项目的Visual Studio解决方案

C++ 具有同名函数的不同项目的Visual Studio解决方案,c++,visual-studio-2010,linker,C++,Visual Studio 2010,Linker,我有一个VS10解决方案,其中包含两个具有相同名称的函数的项目。链接器抱怨(抛出警告)第二个定义(两个同名函数)被忽略: 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 XX

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

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文件。事实上,解决方案在任何编译中只需要两个项目中的一个,因此条件编译的简单方法非常好,但我的第一个偏好是将两个项目一起编译。

这违反了只声明一个tempate、type、,函数或对象可能存在于整个程序中。要解决此问题,请通过名称或参数重载使两个函数的签名唯一,将它们放置在不同的名称空间中,或者如果同时需要两个库,请使用条件编译。

谢谢!你有关于条件编译的链接吗?关于cpp参考的页面应该让您开始。翻译单元是cpp文件,还是项目或整个解决方案?相同名称的功能位于两个不同的项目中。根据wiki页面,TU是一个cpp文件,在这种情况下,不同项目中相同的名称不应该成为问题。我完全错了吗?翻译单元是一个源代码文件,它被翻译成一个目标文件,并最终链接到一个库或可执行文件。即使您使用的是两个不同的库,最终结果还是一个可执行文件,它只能有一个项的定义。@SMir:ODR基于链接应用。如果链接是转换单元的本地链接(例如静态全局变量),则定义只需在TU内唯一。但您处理的是外部链接,然后所有外部定义必须在所有TU中一致。