Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual c++ 生成符号名称时出现错误LNK2005_Visual C++ - Fatal编程技术网

Visual c++ 生成符号名称时出现错误LNK2005

Visual c++ 生成符号名称时出现错误LNK2005,visual-c++,Visual C++,1> 表达式.obj:错误LNK2005:“??@10f67d10f2509d1b7ae3d4b0285ba9c5@”(??@10f67d10f2509d1b7ae3d4b0285ba9c5@)已在DeterminesSwitchBranchs.obj中定义 1> 表达式.obj:错误LNK2005:“??@7d18b7ced3468f6b7bb84d399883984b@”(??@7d18b7ced3468f6b7bb84d399883984b@)已在DeterminesSwitchBranc

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文件


该项目使用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);