1> expression.obj:错误LNK2005:在defineSwitchBranches.obj中已定义的“ ?? @ 10f67d10f2509d1b7ae3d4b0285ba9c5 @”(?? @ 10f67d10f2509d1b7ae3d4b0285ba9c5 @) 1> expression.obj:错误LNK2005:已经在defineSwitchBranches.obj中定义的“ ?? @ 7d18b7ced3468f6b7bb84d399883984b @”(?? @ 7d18b7ced3468f6b7bb84d399883984b @) 1> expression.obj:错误LNK2005:在defineSwitchBranches.obj中已经定义的“ ?? @ 84d623799b2629b9bf1736313b3256f5 @”(?? @ 84d623799b2629b9bf1736313b3256f5 @) 1> expression.obj:错误LNK2005:已经在defineSwitchBranches.obj中定义的“ ?? @ cabc6fa94b805937911b53b075b3724c @”(?? @ cabc6fa94b805937911b53b075b3724c @) 1> expression.obj:错误LNK2005:已经在defineSwitchBranches.obj中定义的“ ?? @ d227a1556c429ce3c346b6ffae37f517 @”(?? @ d227a1556c429ce3c346b6ffae37f517 @) 1> C:\ Users \ pfoelsch \ Documents \ SYMPHONY \ symphony \ src \ veriloga \ modelcompiler \ src \ x64 \ Debug \ smc.exe:致命错误LNK1169:找到一个或多个乘法定义的符号 1>完成的建筑项目“ smc.vcxproj”-失败。
当我将两个有问题的.cpp文件合并为一个文件时,链接器会抱怨另外两个.obj文件。...
该项目使用g ++ 5.5和7.3可以很好地构建
答案 0 :(得分:1)
我也通过创建带有源代码注释的.asm文件,然后查看源代码中哪一行与有害符号名称(project_properties / C ++ / output_files / assembler_output = assembly_with_source_code)相对应来解决此问题。 .h文件中有一个带有虚拟方法的模板化类:
template<typename>
class A
{
virtual void b(void) const;
};
template<typename>
void A::b(void)
{
}
和一个.cpp文件!!!包含b的专业化:
template<>
void A<something>::b(void)
{
}
为此添加一些标头到.h文件中解决了该问题! (再次:令人反感的源代码在各种g ++版本中都构建良好):
template<>
void A<something>::b(void);