我使用模板类构建了一个双向链表,我构建的类包含内部公共类 linkedListNode ,其中包含私有字段 next 和 previous 。 对于封装问题,我想定义一个返回下一个节点的方法
template <class T>
MyLinkedList<T>::MyLinkedListNode* MyLinkedList<T>::MyLinkedListNode::getNext()
{
return this -> next;
}
但这是一个编译错误。 我也尝试使用typename,它也是一个编译错误
补偿错误是:
在'MyLinkedList :: MyLinkedListNode'之前需要'typename'因为 'MyLinkedList'是一个依赖范围
答案 0 :(得分:3)
正如编译器告诉你的那样:
在'MyLinkedList :: MyLinkedListNode'之前需要'typename',因为'MyLinkedList'是一个依赖范围
您应该使用typename
,因为MyLinkedList<T>::MyLinkedListNode*
是一个从属名称(它取决于模板参数T
)。您可以使用以下命令修复代码:
template <class T>
typename MyLinkedList<T>::MyLinkedListNode* MyLinkedList<T>::MyLinkedListNode::getNext()
{
return this->next;
}
作为you can see,它的工作正常。
答案 1 :(得分:2)
实例化MyLinkedList<T>
时,它有可能是值而不是类型。要使编译器知道它是一种类型,需要typename
关键字。对于从属名称,编译器不做任何假设。程序员可以将typename
和template
个关键字放在正确的位置。幸运的是,它在错误信息中是正确的。它不能比这更容易。
答案 2 :(得分:1)
您的编译器告诉您解决方案:
template <class T>
typename MyLinkedList<T>::MyLinkedListNode* MyLinkedList<T>::MyLinkedListNode::getNext()
{
return this -> next;
}