提问人:Toasdn 提问时间:4/21/2022 更新时间:4/21/2022 访问量:936
VS 2022:调用在类定义外部定义的方法时出现“未解析的外部”错误
VS 2022: "Unresolved external" error when calling methods that are defined outside of the class definition
问:
因此,我尝试在 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)
我不知道发生了什么,并希望得到任何帮助。
答:
1赞
Minxin Yu - MSFT
4/21/2022
#1
在 C++ 中,函数的主体必须存在于调用它们的每个翻译单元中。inline
删除内联不会更改任何内容
尝试测试它。我不是唯一一个证明导致 lnk 错误的人。如
Sedenion说,这是一个使用错误。inline
我建议将这种错误行为报告给开发人员社区,并在此线程中发布链接。
评论
0赞
Toasdn
4/21/2022
已经有一个修复它的请求:https://developercommunity.visualstudio.com/t/Move-Definition-Location-should-not-add/1015726
评论
inline void TestClass::testMethod() {
你的错误是删除它,留下其余的。inline
inline
inline
inline