Visual c++ 生成符号名称时出现错误LNK2005
1> 表达式.obj:错误LNK2005:“??@10f67d10f2509d1b7ae3d4b0285ba9c5@”(??@10f67d10f2509d1b7ae3d4b0285ba9c5@)已在DeterminesSwitchBranchs.obj中定义 1> 表达式.obj:错误LNK2005:“??@7d18b7ced3468f6b7bb84d399883984b@”(??@7d18b7ced3468f6b7bb84d399883984b@)已在DeterminesSwitchBranchs.obj中定义 1> 表达式.obj:错误LNK2005:“??@84d623799b2629b9bf1736313b3256f5@”(??@84d623799b2629b9bf1736313b3256f5@)已在DeterminesSwitchBranchs.obj中定义 1> 表达式.obj:错误LNK2005:“??@cabc6fa94b805937911b53b075b3724c@”(??@cabc6fa94b805937911b53b075b3724c@)已在DeterminesSwitchBranchs.obj中定义 1> 表达式.obj:错误LNK2005:“??@d227a1556c429ce3c346b6ffae37f517@”(??@d227a1556c429ce3c346b6ffae37f517@)已在DeterminesSwitchBranchs.obj中定义 1> C:\Users\pfoelsch\Documents\SYMPHONY\SYMPHONY\src\veriloga\modelcompiler\src\x64\Debug\smc.exe:致命错误LNK1169:找到一个或多个多重定义符号 1> 完成构建项目“smc.vcxproj”--失败 当我将两个有问题的.cpp文件合并为一个文件时,链接器会抱怨另外两个.obj文件Visual c++ 生成符号名称时出现错误LNK2005,visual-c++,Visual C++,1> 表达式.obj:错误LNK2005:“??@10f67d10f2509d1b7ae3d4b0285ba9c5@”(??@10f67d10f2509d1b7ae3d4b0285ba9c5@)已在DeterminesSwitchBranchs.obj中定义 1> 表达式.obj:错误LNK2005:“??@7d18b7ced3468f6b7bb84d399883984b@”(??@7d18b7ced3468f6b7bb84d399883984b@)已在DeterminesSwitchBranc
该项目使用g++5.5和7.3构建得很好,我还通过创建带有源代码注释的.asm文件来解决这个问题,然后查看源代码中哪一行对应于有问题的符号名(project\u properties/C++/output\u files/assembler\u output=assembly\u with\u source\u code)。 在某个.h文件中有某个模板类具有虚拟方法:
template<typename>
class A
{
virtual void b(void) const;
};
template<typename>
void A::b(void)
{
}
模板
甲级
{
虚空b(虚空)常数;
};
样板
作废A::b(作废)
{
}
和一个.cpp文件!!!包含b的专门化:
template<>
void A<something>::b(void)
{
}
模板
作废A::b(作废)
{
}
在.h文件中添加一些头文件解决了这个问题!(同样:有问题的源代码使用各种g++版本构建得很好):
模板
无效A::b(无效);
在演示问题的基础上工作。您不止一次地定义了某些内容,可能是在多个文件包含的头文件中定义的,但如果没有示例,这只是一个猜测。您还应该查看预编译头的设置。如果你把它打开了,但用错了,这很容易做到,它可能会导致这样的问题。@Retired Ninja-这样的例子已经是答案了,不是吗?
template<>
void A<something>::b(void);