VS 2022:调用在类定义外部定义的方法时出现“未解析的外部”错误

VS 2022: "Unresolved external" error when calling methods that are defined outside of the class definition

提问人:Toasdn 提问时间:4/21/2022 更新时间:4/21/2022 访问量:936

问:

因此,我尝试在 Visual Studio 2022 中运行可以想象到的最简单的 C++ 程序:

main.cpp:

#include "TestClass.h"

int main() {
    TestClass().testMethod();
}

TestClass.h:

#pragma once
class TestClass {
public:
    void testMethod();
};

测试类.cpp:

#include "TestClass.h"

inline void TestClass::testMethod() {

}

但是由于某种原因,我只收到链接器错误:

error LNK2019: unresolved external symbol "public: void __cdecl TestClass::testMethod(void)" (?testMethod@TestClass@@QEAAXXZ) referenced in function main

我知道 Stack Overflow 上有很多关于该特定错误的问题,但我找不到任何适用于我的情况的内容,除了这个没有答案的问题。

所有文件都包含在项目中(所有内容都是在 Visual Studio 中生成的),我没有收到来自 IntelliSense 的任何警告,并且每个文件本身都可以很好地编译(使用 Ctrl+F7)

我不知道发生了什么,并希望得到任何帮助。

C++ Visual-Studio 链接器错误未 解决外部

评论

4赞 drescherjm 4/21/2022
inline void TestClass::testMethod() {你的错误是删除它,留下其余的。inline
0赞 Ken White 4/21/2022
这回答了你的问题吗?什么是未定义的引用/未解析的外部符号错误,如何解决?
0赞 Toasdn 4/21/2022
@drescherjm 删除不会改变任何东西,此外,这是 VS2022 在执行“移动函数定义”时生成的inline
0赞 Toasdn 4/21/2022
@KenWhite 谢谢,但如果 37 个答案中的一个有我需要的解决方案,我无法正确理解和应用它。
1赞 Sedenion 4/21/2022
我刚刚用 VS2022 尝试过。这肯定是罪魁祸首。此外,VS2022 生成的是不正确的。显然,该函数用于将代码移动到标头。inlineinline

答:

1赞 Minxin Yu - MSFT 4/21/2022 #1

在 C++ 中,函数的主体必须存在于调用它们的每个翻译单元中。inline

删除内联不会更改任何内容

尝试测试它。我不是唯一一个证明导致 lnk 错误的人。如 Sedenion说,这是一个使用错误。inline

我建议将这种错误行为报告给开发人员社区,并在此线程中发布链接。

评论