[英]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.