错误LNK2019未解析的外部符号"public: __thiscall SLinkList<char>::SLinkList<char>(void)"
Error LNK2019 unresolved external symbol "public: __thiscall SLinkList<char>::SLinkList<char>(void)"
>我不知道为什么:当声明和定义没有与块的类(类SLinkedList{ ....}(分开时。该建筑将取得成功。
但是当我在下面分离类的声明和定义时。建筑物将报告这样的错误
"Severity Code Description Project File Line Suppression State Error LNK2019 unresolved external symbol "public: __thiscall SLinkList<char>::SLinkList<char>(void)" (??0?$SLinkList@D@@QAE@XZ) referenced in function _main LinkedLists C:UsersLQADocumentsVisual Studio 2015ProjectsDataStructuresDataStructuresSource.obj 1"
这是详细的源代码: [链接列表.h]
#include <iostream>
#include <string>
using namespace std;
//Singly Linked List
template<typename E>
class SLinkList;
template<typename E>
class SNode
{
private:
E elem;
SNode<E>* next;
friend class SLinkList<E>;
};
template<typename E>
class SLinkList
{
public:
SLinkList();
~SLinkList();
bool empty() const;
const E& front() const;
void addFront(const E& e);
void removeFront();
private:
SNode<E>* head;
};
[链接列表.cpp]
#include "LinkedLists.h"
/*
* SINGLY LINKED LIST
*/
template<typename E>
SLinkList<E>::SLinkList() :
head(NULL) {}
template<typename E>
SLinkList<E>::~SLinkList()
{
while (!this->empty())
{
removeFront();
}
}
template<typename E>
bool SLinkList<E>::empty() const
{
return head == NULL;
}
template<typename E>
const E& SLinkList<E>::front() const
{
return this->head->elem;
}
template<typename E>
void SLinkList<E>::removeFront()
{
SNode<E>* old = this->head;
this->head = old->next;
delete old;
}
template<typename E>
void SLinkList<E>::addFront(const E& e)
{
SNode<E>* v = new SNode<E>;
v->elem = e;
v->next = this->head;
this->head = v;
}
[来源.cpp]
#include "LinkedLists.h"
using namespace std;
int main(void)
{
SLinkList<char>* llst = new SLinkList<char>();
//llst->addFront('a');
//llst->addFront('b');
return 0;
}
有谁知道导致此问题的原因?
您是否尝试在h文件中的类声明之前添加"__declspec(dllexport("?
一旦将类函数成员定义移动到单独的 cpp 文件,就需要添加此说明符,以使所有这些定义在 dll 外部可见。
如果在 c++ 中声明模板类,则应将函数体包含在头文件中。
例如:[LinkedLists.h]
...
template<typename E>
class SLinkList
{
public:
SLinkList() : head(NULL) {};
~SLinkList()
{
while (!this->empty())
{
removeFront();
}
};
bool empty() const
{
return head == NULL;
}
...
相关文章:
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 呼叫运营商<<临时
- 如何防止clang格式在流运算符调用之间添加换行符<<
- <<操作员在下面的行中工作
- 错误LNK2019未解析的外部符号"public: __thiscall SLinkList<char>::SLinkList<char>(void)"
- 如何显式调用运算符<<
- 模板操作员&lt;未打电话
- C / CUDA中的模板方法是3个角括号(&lt;&lt;&lt;)
- C - 创建矢量&lt; vector&lt; double&gt;&gt;矩阵具有分配而不是inizializ
- 错误:调用"std::vector<:vector<int>>::p ush_back(std::vector<std::__cxx11::basic_string<
- C 建造者Clang STD :: Sill,找不到超载的操作员&lt;
- 为什么STD :: MAP需要操作员&lt;以及我如何写一个
- 为什么“操作员”需要const但不是为“运营商&lt;”
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- C :对矢量进行排序&lt; struct&gt;(结构有2个整数)基于结构的整数之一
- 明确的专业化“ CheckIntmap&lt;&gt;”实例化
- 什么是模板&lt;&gt;inline bla bla
- 左角支架解释为操作员&lt;而不是模板参数
- 编辑C Qlist&lt; object*&gt; gt;QML代码和一些QML警告中的模型
- 超载操作员&lt;&lt; - 必须是二进制操作员