【发布时间】:2020-04-26 16:15:23
【问题描述】:
我有一个实现节点结构的链表类,像这样:
template<class T>
class LinkedList
{
public:
struct Node {
T value;
Node *next;
};
int Length;
Node *head;
Node *tail;
LinkedList() {
Length = 0;
Node* head = nullptr;
Node* tail = nullptr;
}
};
我尝试从驱动程序文件中访问节点Node 结构,如下所示:
#include "LinkedList.h"
template<class T>
void foo(LinkedList<T> list) {
LinkedList<T>::Node* a = list.head; // does not work
LinkedList<int>::Node* b = list.head; // works (if T is int of course)
}
使用模板 T 不起作用(它给我“找不到标识符”错误消息),而直接指定正确的数据类型有效。这是为什么?有没有办法避免错误?
【问题讨论】:
-
写
typename LinkedList<T>::Node *a。基本上,由于LinkedList<T>命名模板特化,编译器不知道LinkedList<T>::Node是类型,因为它可能是静态变量,或者可能是成员函数,所以你需要明确地说它是一个类型.请参阅the linked question 了解原因 -
@HTNW,我实际上看到了这个问题,但不明白如何使用它来解决我的问题。感谢您的帮助