2

重複の可能性:
テンプレートを使用すると「未解決の外部シンボル」エラーが発生するのはなぜですか?

LinkedList.h

#ifndef LINKEDLIST_H
#define LINKEDLIST_H
#include<iostream>

template<class T> class LinkedList;

//------Node------
template<class T>
class Node {
private:
    T data;
    Node<T>* next;
public:
    Node(){data = 0; next=0;}
    Node(T data);
    friend class LinkedList<T>;

};


//------Iterator------
template<class T>
class Iterator {
private:
    Node<T> *current;
public:

    friend class LinkedList<T>;
    Iterator operator*();
 };

//------LinkedList------
template<class T>
class LinkedList {
private:
    Node<T> *head;


public:
    LinkedList(){head=0;}
    void push_front(T data);
    void push_back(const T& data);

    Iterator<T> begin();
    Iterator<T> end();

};



#endif  /* LINKEDLIST_H */

LinkedList.cpp

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


using namespace std;

//------Node------
template<class T>
Node<T>::Node(T data){
    this.data = data;
}


//------LinkedList------
template<class T>
void LinkedList<T>::push_front(T data){

    Node<T> *newNode = new Node<T>(data);

    if(head==0){
        head = newNode;
    }
    else{  
        newNode->next = head;
        head = newNode;
    }    
}

template<class T>
void LinkedList<T>::push_back(const T& data){
    Node<T> *newNode = new Node<T>(data);

    if(head==0)
        head = newNode;
    else{
        head->next = newNode;
    }        
}


//------Iterator------
template<class T>
Iterator<T> LinkedList<T>::begin(){
    return head;
}

template<class T>
Iterator<T> Iterator<T>::operator*(){

}

main.cpp

#include "LinkedList.h"

using namespace std;


int main() {
    LinkedList<int> list;

    int input = 10;

    list.push_front(input); 
}

こんにちは、私は c++ の初心者で、テンプレートを使用して独自の LinkedList を作成しようとしています。

私は自分の本をかなり綿密にたどり、これが私が得たものです。私はこのエラーが発生しています。

/main.cpp:18: 「LinkedList::push_front(int)」への未定義の参照

理由はわかりませんが、アイデアはありますか?

4

1 に答える 1

6

プログラムでテンプレートを使用しています。テンプレートを使用する場合、コンパイラはプログラムで使用されるコードを生成する必要があるため、コードとヘッダーを同じファイルに記述する必要があります。

これを行うか、に含めることができ#inlcude "LinkedList.cpp"ますmain.cpp

この質問はあなたを助けるかもしれません。 テンプレートをヘッダー ファイルにしか実装できないのはなぜですか?

于 2012-11-04T07:24:13.263 に答える