1

这段代码如果来自链接列表的示例,但我很难理解这个函数的第二行,有人可以告诉我吗?

template <typename T>
typename List<T>::Node* List<T>::search(T d)
{
    if(!head) return NULL;
    Node* cur = head;
    while(cur) {
        if(cur->data == d) return cur;
        cur = cur->next;
    }
    return NULL;
}    
4

3 回答 3

3

类模板(或特化)中会有一个*type* Node地方,List<>因此在引用该类型时typename List<T>::Node必须使用语法。

从属名称可以用typename关键字消除歧义。

于 2013-08-08T15:47:11.977 回答
1

如果您的意思是帖子中的第二行,那就是“搜索是一个函数,它接受一个类型的参数T并返回一个指向特定于链接列表的类型的指针,称为List<T>::Node.

如果你指的是函数本身的第二行search,它只是将一个局部变量初始化cur为一个名为的成员变量head(这里可能指的是链表数据 st. 的头部)。其余代码只是迭代列表中的元素,直到找到并返回包含正在搜索的数据的节点。

于 2013-08-08T15:56:44.697 回答
0

考虑A<T>::X。X 可以是类型(typedef、struct 等),也可以是变量(静态变量)。当您在模板“内部”并以这种方式使用具有模板的类型时,typename如果您的 X 是一种类型,则必须通过添加来帮助编译器。

于 2013-08-08T15:48:34.683 回答