未解析的外部符号.MSVS社区2015
Unresolved External Symbol. MSVS community 2015
在编译我的程序时,我得到一个链接错误LINK2019。常见的错误是声明了函数但没有定义,这里不是这种情况。例如,下面的类是在头文件dict.h
中定义的template<typename key, typename elem>
class Slist{
public:
list<KV_pair<key, elem>> *data;
Slist(int size);
~Slist();
void insert(KV_pair<key, elem> &kv);
elem &operator[](key k_val);
};
我在一个单独的dict.cpp文件
中定义了成员template<typename key, typename elem>
Slist<key, elem>::Slist(int size) {
data = new list<KV_pair<key, elem>>(size);
}
template<typename key, typename elem>
Slist<key, elem>::~Slist() {
}
template<typename key, typename elem>
void Slist<key, elem>::insert(KV_pair<key, elem> &kv){
KV_pair<key, elem> *temp;
for (data->movestart();data->r_len() > 0; data->next()) {
temp = &data->get_val();
if (temp->get_key() > kv.get_key()) {
break;
}
data->insert(kv);
}
}
如果我把我的main()
在dict.cpp文件一切工作,但是当我试图把main()
在一个单独的文件和#include "dict.h"
我得到未解决的外部错误。虽然这样做是不正确的,但在#include "dict.h"
之后使用#include "dict.cpp"
可以解决错误。我将dict.h文件放在头文件目录中,并将main.cpp和dict.cpp放在源文件目录/
编译器在使用模板类型(和函数)时展开它们。这意味着编译器必须能够在使用它们时找到它们的定义。因此,所有模板定义(不仅仅是声明)必须存在于头文件中,或者包含在头文件中的文件中。
相关文章:
- std::multimap<std::chrono::milliseconds, T>::rbegin 在 MSVS-13 中指向 end()?
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- 编译器错误(英特尔并行工作室 2019 与 Visual Studio 社区 2019)
- VS 2017 社区收到链接器错误,但专业版没有
- C++20 概念测试在 MSVS 16.5 中不起作用
- 如何覆盖 Visual Studio 2017 社区的编译命令
- 如何在Visual studio 2017社区版中编译字节币源代码
- boost::stacktrace on Windows MSVS 2017
- 为什么这个自定义分配器的析构函数在 GCC/MSVS 的 stdlib 中被调用两次
- 如何在视觉工作室社区中设置竞争性编程站点等环境?
- 无法在视觉工作室社区 2015 中加载项目
- 使用 CXX 社区插件在 Sonarqube-5.6.6(LTS) 中导入 Gcov 报告
- 为什么我可以在 MSVS 中使用 size_t 和 std::size_t 而不使用传统的标头?
- C++程序在VS2017社区崩溃
- MSVS 2015, C++, 使用参数调用构造函数会导致错误
- 为什么 MSVS 静态分析器忽略_Check_return_
- 如何在何处获取 MSVS 2008(32 位)编译器工具链的编译器,而无需安装 MSVS2008
- 如何让 MSVS 识别 bigobj 标志?
- 部署应用程序,C++,Visual Studio 2015社区版本
- 未解析的外部符号.MSVS社区2015