【问题标题】:Linker error in Visual Studio 2017 (unresolved external symbol)Visual Studio 2017 中的链接器错误(未解析的外部符号)
【发布时间】: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


【解决方案1】:

你需要做的

右键项目>添加>参考

然后添加您的库项目作为参考。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-21
    • 1970-01-01
    • 2014-05-15
    • 2018-10-02
    • 1970-01-01
    相关资源
    最近更新 更多