::SLinkList(void)"-6ren"> ::SLinkList(void)"- 这个问题在这里已经有了答案: Why can templates only be implemented in the header file? (18 个答案) 关闭 4 年前。 我不知道为什么:-6ren">
gpt4 book ai didi

c++ - 错误 LNK2019 未解析的外部符号 "public: __thiscall SLinkList::SLinkList(void)"

转载 作者:太空宇宙 更新时间:2023-11-04 12:45:09 24 4
gpt4 key购买 nike

<分区>

我不知道为什么:当声明和定义没有与 block 的类(class SLinkedList{ ....})分开时。 build 一定会成功。

但是当我将下面类的声明和定义分开时。大楼会报这样的错误

"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:\Users\LQA\Documents\Visual Studio 2015\Projects\DataStructures\DataStructures\Source.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;
}

有谁知道这个问题是什么原因造成的?

24 4 0