0

重複の可能性:
テンプレートをヘッダーファイルにのみ実装できるのはなぜですか?
テンプレート演算子のオーバーロード関数の未定義のシンボル

私の学校の課題では、リンクリストを使用してスタックを作成するプログラムを作成する必要があります。リンカーエラーが発生し続けます(具体的には、エラー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");
}
4

1 に答える 1

2

リンカがそれを取得するには、ヘッダーファイルにテンプレート関数を実装する必要があります。詳細については、この質問 を参照してください。

また、詳細については、C++FAQを参照してください。

于 2012-09-25T22:21:27.743 に答える