编译时,我在链表类中不断收到有关模板的错误。对于我正在做的一个项目,我们必须制作一个链表,基本上只是用不同的函数来修改它,但我不知道如何让它与我的模板一起工作,并在我的main((中运行函数。这就是代码。
#pragma once
template <typename ItemType>
class LinkedList {
private:
struct Node {
ItemType info;
Node* next;
Node* prev;
};
Node* head;
Node* tail;
int size;
public:
LinkedList() :
size(0),
head(NULL),
tail(NULL)
{ }
~List()
{
clear();
}
void clear()
{
Node* n = tail;
while(n != NULL)
{
Node *temp = n;
n = n->prev;
delete temp;
}
head = NULL;
tail = NULL;
}
void print()
{
int count = 0;
Node* temp = head;
while(temp != NULL)
{
cout << "node " << count << ": " << temp->info << endl;
temp = temp->N;
count++;
}
}
void insert(int index, const ItemType& item)
{
int count = 0;
Node* n = head;
while(n != NULL)
{
if(count == index)
{
break;
}
n = n->next;
count++;
}
if(n == NULL)
{
return;
}
Node* p = new Node;
p->info = item;
p->next = n->next;
p->prev = n;
n->next = p;
}
所以我把所有的函数都放在头文件中,因为这是他们要求我们使用的格式
#include <iostream>
#include <string>
#include <fstream>
#include "LinkedList.h"
using namespace std;
int main(int argc, char* argv[])
{
string cmd;
int index;
string item;
LinkedList<string> list; // I don't know if this is how its suppose to be done.
while(cin >> cmd)
{
if (cmd == "clear")
{
cout << "clear" << endl;
}
if (cmd == "insert")
{
cin >> index;
cin >> item;
list.insert(index, item);
}
if (cmd == "print")
{
cout << "print" << endl;
}
}
system("pause");
return 0;
}
所以基本上我不知道如何在main中运行头文件中的函数,并且它能正确编译。它给我的错误与带有std::字符串的LinkedList部分有关。所以我只是不确定如何以正确的方式初始化它以使函数工作。我现在不那么担心,如果函数的代码是正确的,我会进行调试并发现我只想能够测试我的代码,但它不会编译!如果有人能引导我朝着正确的方向前进,那就太棒了。谢谢
错误:
1> project5.cpp
1>c:usersmarshdocumentscsproject5project5linkedlist.h(28): error C2523: 'LinkedList<ItemType>::~List' : destructor tag mismatch
1> c:usersmarshdocumentscsproject5project5linkedlist.h(133) : see reference to class template instantiation 'LinkedList<ItemType>' being compiled
1>c:usersmarshdocumentscsproject5project5linkedlist.h(28): error C2523: 'LinkedList<ItemType>::~List' : destructor tag mismatch
1> with
1> [
1> ItemType=std::string
1> ]
1> c:usersmarshdocumentscsproject5project5project5.cpp(15) : see reference to class template instantiation 'LinkedList<ItemType>' being compiled
1> with
1> [
1> ItemType=std::string
1> ]
~List()
{
clear();
}
应该是:
~LinkedList()
{
clear();
}
编译器错误非常清楚地指出了问题:
~List()
{
clear();
}
您的类型命名为LinkedList
,而不是List
。