我正在实施这个课程:
ListNode
我想在ListNodeCode.h
中实现ListNodeCode.h
类,但我收到此错误:
[错误]专门成员' List :: ListNode :: ListNode'需要'模板<>'语法
这是目前#ifndef LISTNODECODE_H
#define LISTNODECODE_H
template <typename NodeType> List<NodeType>::ListNode<NodeType>::ListNode(const NodeType& value,const ListNode<NodeType>*const pElement, const ListNode<NodeType>*const nElement){
this->value=new NodeType();
*(this->value)=value;
this->pElement=pElement;
this->nElement=nElement;
cout << "Node created, (Value: " << (*this->value) << ", previous: " << pElement << ", next: " << nElement;
}
#endif
内唯一的方法:
{{1}}
如何正确实施?
答案 0 :(得分:3)
请注意,ListNode
是member template;并且有两个单独的模板参数,一个(即ListType
)用于封闭模板List
,一个(即NodeType
)用于成员模板ListNode
,所以定义应该是:
template <typename ListType> // for the enclosing class template
template <typename NodeType> // for the member template
List<ListType>::ListNode<NodeType>::ListNode(const NodeType& value,const ListNode<NodeType>*const pElement, const ListNode<NodeType>*const nElement) {
// ...
}
答案 1 :(得分:1)
它是一个嵌套模板,因此你必须在定义中同时使用这两个级别
template <typename ListType>
template <typename NodeType>
List<ListType>::ListNode<NodeType>::ListNode(const NodeType& value,const ListNode<NodeType>*const pElement, const ListNode<NodeType>*const nElement)
// ^---- Note that it is ListType here