模板类编译错误

时间:2014-03-15 17:16:50

标签: c++ templates compiler-errors linked-list

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

}

所以基本上我不知道如何在我的主文件中运行我的头文件中的函数并正确编译。它给我的错误与带有std :: string的LinkedList部分有关。所以我只是不确定如何初始化正确的方法来使函数工作。我现在不是很担心,如果函数的代码是正确的,我会做调试并想出来我只是想能够测试我的代码,但它不会编译!如果有人能引导我朝着正确的方向前进,那将是非常棒的。谢谢。

错误:

1>  project5.cpp
1>c:\users\marsh\documents\cs\project5\project5\linkedlist.h(28): error C2523: 'LinkedList<ItemType>::~List' : destructor tag mismatch
1>          c:\users\marsh\documents\cs\project5\project5\linkedlist.h(133) : see reference to class template instantiation 'LinkedList<ItemType>' being compiled
1>c:\users\marsh\documents\cs\project5\project5\linkedlist.h(28): error C2523: 'LinkedList<ItemType>::~List' : destructor tag mismatch
1>          with
1>          [
1>              ItemType=std::string
1>          ]
1>          c:\users\marsh\documents\cs\project5\project5\project5.cpp(15) : see reference to class template instantiation 'LinkedList<ItemType>' being compiled
1>          with
1>          [
1>              ItemType=std::string
1>          ]

2 个答案:

答案 0 :(得分:1)

~List() 
{
    clear();
}

应该是:

~LinkedList() 
{
    clear();
}

答案 1 :(得分:0)

编译器错误非常清楚地指出了问题所在:

~List() 
{
    clear();
}

您的类型名为LinkedList,而不是List