Я пытаюсь реализовать односвязный список, в котором хранятся несколько типов элементов. Поэтому я столкнулся с шаблонами, но когда я попытался запустить следующий код, компилятор дал мне несколько ошибок связывания (LNK 2019: неразрешенный внешний символ). Я еще ничего не сделал и не могу понять, что пошло не так. Может ли кто-нибудь указать мою ошибку?
singlylinkedlist.h
template <class Item>
class SinglyLinkedList
{
public:
SinglyLinkedList();
~SinglyLinkedList();
private:
template <class I>
struct Node {
I item;
Node<I> *next;
};
Node<Item> *head;
};
singlylinkedlist.cpp
#include "singlylinkedlist.h"
template <class Item>
SinglyLinkedList<Item>::SinglyLinkedList()
{
head = NULL;
}
main.cpp
#include <iostream>
#include "singlylinkedlist.h"
using namespace std;
int main()
{
SinglyLinkedList<string> list;
}
Есть ряд небольших проблем с кодом, например, вы не реализовали деструктор, и вам не нужно очень часто менять шаблон Node. Измените свою реализацию следующим образом:
// singlylinkedlist.h
template <class Item>
class SinglyLinkedList
{
public:
SinglyLinkedList() : head(NULL) {}
~SinglyLinkedList() {}
private:
struct Node {
Item item;
Node *next;
};
Node *head;
};
// main.cpp
#include "singlylinkedlist.h"
using namespace std;
int main()
{
SinglyLinkedList<string> list;
}
Вы не реализовали деструктор:
template <class Item>
SinglyLinkedList<Item>::~SinglyLinkedList()
{
//cleanup
}
Node
, достаточно просто использовать параметрItem
из внешнего класса.