Неопределенная ссылка на `LinkedList<int>:: push_front (int)

Возможный дубликат:
Почему я получаю ошибки "неразрешенный внешний символ" при использовании шаблонов?

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 ответ

Вы используете шаблоны в своей программе. Когда вы используете шаблоны, вы должны написать код и заголовки в одном и том же файле, потому что компилятор должен сгенерировать код, в котором он используется в программе.

Вы можете сделать это или включить #inlcude "LinkedList.cpp" в main.cpp

Этот вопрос может помочь вам. Почему шаблоны могут быть реализованы только в заголовочном файле?

Другие вопросы по тегам