C ++ - 在单独的文件中实现内部模板类的模板方法

时间:2017-01-21 10:10:52

标签: c++ class templates definition

我正在实施这个课程:

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

如何正确实施?

2 个答案:

答案 0 :(得分:3)

请注意,ListNodemember 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