未定义的引用`LinkedList <int> :: push_front(int)</int>

时间:2012-11-04 07:20:41

标签: c++ templates undefined-reference

  

可能重复:
  Why do I get “unresolved external symbol” errors when using templates?

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)'

我不知道为什么,任何想法?

1 个答案:

答案 0 :(得分:5)

您正在使用计划中的模板。使用模板时,必须在同一个文件中编写代码和标题,因为编译器需要生成代码并在程序中使用它。

您可以执行此操作或在#inlcude "LinkedList.cpp"

中加入main.cpp

这个问题可能会对你有所帮助。 Why can templates only be implemented in the header file?