簡體   English   中英

C ++模板類

[英]C++ Template Classes

我是計算機科學專業的學生,​​我們目前正在學習C++ Templates 我們被指示編寫“ Linked List模板類,並且不允許使用STL (請注意,這是未完成的代碼):

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 Express上調試):

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 ==========

first = Node<T>(t);

需要是

first = new Node<T>(t);

因為firstNode* ,而不是Node

您還可以使用以下方法對其進行初始化:

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

這是首選方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM