链接 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 所指出的那样。除非您真的知道自己在做什么,否则您不太可能从中获益。