尝试创建链接列表堆栈时链接器错误

时间:2012-09-25 22:19:49

标签: c++ templates linked-list stack

  

可能重复:
  Why can templates only be implemented in the header file?
  Undefined symbol on a template operator overloading function

对于我的学校作业,我需要制作一个使用链表制作堆栈的程序。我不断收到链接器错误(特别是:错误LNK2019:未解析的外部符号“public:__thiscall Stack :: Stack(void)”(?? 0?$ Stack @ H @@ QAE @ XZ)在函数_main 1> C中引用: \ Users \ devon.taylor \ Desktop \ New folder \ Debug \ PA3.exe:致命错误LNK1120:1未解析的外部)

这是我的代码:

部首:

template <class T>
class  Stack
{
public:
    Stack();
    Stack(T data);
    ~Stack();
    void push(T data);
    T pop();
    void display();
    bool isEmpty();
    bool isExist(T searchKey);

private:
    Stack<T> *top;
    Stack<T> *next;
    T mData;
};

功能:

#include "stack.h"
#include <iostream>

using namespace std;

template <class T>
Stack<T>::Stack()
{
    top=NULL;
}

template <class T>
Stack<T>::Stack(T data)
{
    mData = data;
    pNext = NULL;
}

template <class T>
Stack<T>::~Stack()
{

}

template <class T>
void Stack<T>::push(T data)
{
   Stack *ptr;
   ptr=new Stack<T>;
   ptr->mData=data;
   ptr->next=NULL;

   if(top!=NULL)
   {
      ptr->next=top;
   }
   top=ptr;
   cout<<"\nNew item inserted to the stack";
}        

template <class T>
T Stack<T>::pop()
{


}
template <class T>
void Stack<T>::display()
{

}

主要功能:

#include <iostream>
#include "stack.h"

using namespace std;

void main ()
{
    Stack<int>* stack;
    stack = new Stack<int>;
    //stack->push(19);



    system("pause");
}

1 个答案:

答案 0 :(得分:2)

您必须在头文件中实现模板函数,以便链接器进行拾取。有关详细信息,请参阅此question

另外,请查看C++ FAQ了解更多详情。