模板类编译错误



编译时,我在链表类中不断收到有关模板的错误。对于我正在做的一个项目,我们必须制作一个链表,基本上只是用不同的函数来修改它,但我不知道如何让它与我的模板一起工作,并在我的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

相关内容

  • 没有找到相关文章

最新更新