【发布时间】:2017-03-20 23:04:27
【问题描述】:
我使用 Visual Studio 2017 RC。我将所有这些文件添加到我的解决方案中:
main.cpp
#include "B.h"
#include "AAA.h"
int main()
{
AAA gen;
gen.Create();
return 0;
}
AAA.h
#ifndef _H_AAA
#define _H_AAA
class AAA
{
public:
void Function();
};
#endif // _H_AAA
AAA.cpp
#include "AAA.h"
#include "B.h"
void AAA::Function()
{
B obj;
obj.Function();
}
B.h
#ifndef _H_B
#define _H_B
class B
{
public:
void Function();
};
#endif // _H_B
B.cpp
#include "B.h"
void B::Function()
{}
当我尝试编译它时,VS 显示错误:
LNK2019 unresolved external symbol "public:
void __thiscall B::Function(void)" (?Function@B@@QAEXXZ)
referenced in function "public:
void __thiscall AAA::Function(void)" (?Function@AAA@@QAEXXZ)`
如果我使用 gcc,它不会显示任何错误。 为什么会发生这种情况以及如何解决这个问题?
@编辑
我创建了新项目并将所有这些文件复制到那里。现在可以正常工作了,但是我还是不明白 VS 的这种奇怪行为。
【问题讨论】:
-
"现在可以正常工作了" 那么,问题现在解决了吗?你的代码有效吗?
-
@ABusyProgrammer 是的,但我不知道为什么第一个项目中的代码不起作用,而新项目中的相同代码运行良好。我没有改变这些偏好。
-
您没有碰巧有原始的 vcxproj 文件,是吗?还是构建日志?您说您将它们添加到项目中-您是如何做到的?我觉得 B.cpp 文件可能已作为标头添加,在这种情况下编译器不会生成对象,并且链接器会失败。我认为 msbuild 应该是
B.cpp 而你的可能是B.cpp -
@KevinK 你是对的。 B.cpp 被添加为标题,所以当我像你说的那样更改 vcxproj 文件时,一切正常。非常感谢。
标签: c++ visual-studio header linker