2

可能重复:
为什么在使用模板时会出现“未解析的外部符号”错误?

链表.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 */

链表.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*(){

}

主文件

#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 回答