簡體   English   中英

復制構造函數中的模板

[英]template in copy constructor

你能告訴我為什么我得到編譯錯誤嗎

template<class T> class 'Node' used without template parameters

用下面的代碼

template<class T>
    class Node
    {
        private:
            T _value;
            vector<Node*> children;

        public:
            Node(T value);
            Node<T>(const Node<T>& node);
            void AddChild(Node<T>* node);
            T getValue();
            vector<Node<T>*> returnChildren();
            ~Node();
    };

    template <class T>
    Node::Node<T>(T value):_value(value)
    {
    }
template <class T>
Node<T>::Node(T value):_value(value)
{
}

試試這個。

當你寫

Node::Node<T>(T value):_value(value)

您在類上沒有模板參數(該行的第一個Node ),但是在構造函數上有一個模板參數(第二個Node )。 那是不對的。

在您的情況下, Node是模板類。 使用該類時,必須將其與模板參數一起使用。 這不起作用:

template <class T>
Node::Node(T value):_value(value)
{
}

因為Node類是模板化的,所以您可以不使用template參數來使用它。

這也不起作用,因為您將模板參數放在函數(此處為構造函數)而非類上。

template <class T>
Node::Node<T>(T value):_value(value)
{
}

這確實有效。

template <class T>
Node<T>::Node(T value):_value(value)
{
}

您僅對類使用此語法,編寫函數時有所不同。

為了功能。
假設我們有這堂課

class MyTemplate
{
    template<typename T>
    void foo(T val);
};

您可以這樣定義方法:

template<typename T>
void MyTemplate::foo<T>(T val)
{

};

但是失敗了。 鐺打印此錯誤:

功能模板不允許部分專業化

對於功能,您不需要它,您必須編寫

template<typename T>
void MyTemplate::foo(T val)
{
}

如果要專攻它,可以寫

template<>
void MyTemplate::foo(int val)
{
}

要么

template<>
void MyTemplate::foo<int>(int val)
{
}

宣言 :

當聲明類型為Node的變量時,也必須使用template參數。

Node<int> myNode(12);

暫無
暫無

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

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