错误LNK2019未解析的外部符号"public: __thiscall SLinkList<char>::SLinkList<char>(void)"

Error LNK2019 unresolved external symbol "public: __thiscall SLinkList<char>::SLinkList<char>(void)"

本文关键字:lt SLinkList char gt void LNK2019 thiscall 外部 符号 错误 public      更新时间:2023-10-16

>我不知道为什么:当声明和定义没有与块的类(类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;
}
...