链接 class 个文件时未解析的外部符号,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;
}
test.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 ==========
为什么要标记定义inline
?
这给了它内部链接,所以没有其他翻译单位可以“看到”它。
当您想将这些定义放在头文件中时,将其放在定义上会很有用,但这不是您在此处所做的。
移除inline
.
inline
关键字表示内部链接,即在 HAT_array.cpp
(或严格来说这个 翻译单元 之外不会看到任何标记的内容定义的地方。
因此在 test.cpp
中您尝试调用未看到的构造函数定义。删除 inline
关键字,不要使用它,正如@drescherjm 所指出的那样。除非您真的知道自己在做什么,否则您不太可能从中获益。
一个项目中有三个文件:
HAT_array.h:
#pragma once
class HAT_array {
public:
HAT_array();
};
HAT_array.cpp:
#include "HAT_array.h"
inline HAT_array::HAT_array() {
return;
}
test.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 ==========
为什么要标记定义inline
?
这给了它内部链接,所以没有其他翻译单位可以“看到”它。
当您想将这些定义放在头文件中时,将其放在定义上会很有用,但这不是您在此处所做的。
移除inline
.
inline
关键字表示内部链接,即在 HAT_array.cpp
(或严格来说这个 翻译单元 之外不会看到任何标记的内容定义的地方。
因此在 test.cpp
中您尝试调用未看到的构造函数定义。删除 inline
关键字,不要使用它,正如@drescherjm 所指出的那样。除非您真的知道自己在做什么,否则您不太可能从中获益。