2014-06-15 138 views
1

我是計算機科學系學生,我們正在研究C++ Templates。 我們奉命寫Linked List模板類,我們不允許使用STL(注意,這是未完成的代碼):C++模板類

template <class T> 
class LinkedList 
{ 
private: 
    //////// NODE CLASS ////////// 
    template <class T> 
    class Node 
    { 
    public: 
     ///// DATA MEMBERS 
     T *m_val; 
     Node<T> *m_next; 
     Node<T> *m_prev; 
     // CTORS 
     Node(T *val) : m_val(val) { m_next = NULL; m_prev = NULL; } 
     Node(T *val, Node<T> *next, Node<T> *prev) : m_val(val), m_next(next), m_prev(prev) { } 
     // C.CTOR 
     Node(const Node<T> & n) { m_val = n->m_val; m_next = n->m_next; m_prev = n->m_prev; } 
     // DTOR 
     ~Node() { delete m_val; if (m_prev) m_prev->m_next = m_next; if (m_next) m_next->m_prev = m_prev; } 
    }; 
    /////////////////////// 

    Node<T> *first; 
public: 
    LinkedList(T*) 
    { 

    } 
    ~LinkedList(); 
}; 

template <class T> 
LinkedList<T>::LinkedList(T* t) 
{ 
    first = Node<T>(t); /// <---- PROBLEM HERE 
} 

然而,問題是,編譯器不會讓我用Node構造函數..

我在做什麼錯?

編輯:

正如我所說的,這是未完成的代碼,所以我想我越來越會被混淆(因爲我無法直接看到的問題來自)的誤差。

無論如何,以下是錯誤(調試上的Microsoft Visual C++ 2010速成):

1>------ Build started: Project: Ex4, Configuration: Debug Win32 ------ 
1>MSVCRTD.lib(crtexe.obj) : error LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup 
1>c:\users\dan\documents\visual studio 2010\Projects\Ex4\Debug\Ex4.exe : fatal error LNK1120: 1 unresolved externals 
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== 
+3

請添加您收到的錯誤。 – Scis

+0

你得到一個誠實的+1並試一試 –

+3

首先,'Node'不應該是一個模板。 –

回答

1

first = Node<T>(t); 

需求是

first = new Node<T>(t); 

因爲firstNode*,而不是Node

您也可以使用初始化:

template <class T> 
LinkedList<T>::LinkedList(T* t) : first(new Node<T>(t)) 
{ 
} 

這是首選的方法。