0

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

4

1 回答 1

1

这违反了单一定义规则,即在整个程序中只能存在一个模板、类型、函数或对象的定义。要解决这个问题,要么通过名称或参数重载使两个函数的签名唯一,将它们放在不同的命名空间中,或者如果同时需要两个库,则使用条件编译。

于 2013-05-21T20:24:59.513 回答