提问人:Mira 提问时间:7/17/2020 更新时间:7/17/2020 访问量:185
链接类文件时无法解析的外部符号,Visual Studio
Unresolved external symbol while linking class files, Visual studio
问:
项目中有三个文件:
HAT_array.h:
#pragma once
class HAT_array {
public:
HAT_array();
};
HAT_array.cpp:
#include "HAT_array.h"
inline HAT_array::HAT_array() {
return;
}
测试.cpp:
#include "HAT_array.h"
int main(void) {
HAT_array HAT;
}
在构建解决方案时,我收到一个未解决的外部符号错误:
1>------ Build started: Project: HashedArrayTree, Configuration: Release Win32 ------
1>HAT_array.cpp
1>test.cpp
1>test.obj : error LNK2001: unresolved external symbol "public: __thiscall HAT_array::HAT_array(void)" (??0HAT_array@@QAE@XZ)
1>C:\Users\myros\Desktop\HashedArrayTree\Release\HashedArrayTree.exe : fatal error LNK1120: 1 unresolved externals
1>Done building project "HashedArrayTree.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
答:
3赞
Asteroids With Wings
7/17/2020
#1
你为什么要标记定义?inline
这给了它内部联系,所以没有其他翻译单位可以“看到”它。
当您想将这些定义放在头文件中时,将其放在定义上可能很有用,但这不是您在此处所做的。
删除内联
。
2赞
Alexey S. Larionov
7/17/2020
#2
inline
关键字意味着内部链接,即任何标记为此类内容都不会在定义它的地方之外(或严格地说是这个翻译单元)看到。HAT_array.cpp
因此,您尝试调用未看到的构造函数定义。删除关键字,不要使用它,正如@drescherjm所指出的那样。除非你真的知道自己在做什么,否则你不太可能从中获得任何好处。test.cpp
inline
评论
inline
表示内部链接,即任何标记为内部链接的内容都不会在其定义位置之外看到。所以这就是你尝试过的。在您尝试调用未看到的构造函数时。删除HAT_array.cpp
test.cpp
inline
inline