我只是想创建一个简单的Node模板类,但由于某种原因,Xcode C ++编译器不喜欢T值。我得到的错误是Field有一个不完整的类型'T'。
template < class T>
class Node
{
public:
T value;
Node<T> next;
};
答案 0 :(得分:1)
Node<T> next;
将next
定义为Node
的实例,但后者尚未完全定义,因此编译器不知道如何构造内部Node
。 Node
需要成为指针
Node<T>* next; // or, better, a smart pointer
通过这种方式,编译器不需要知道&#34;遇到行Node<T>
时Node<T>* next;
的完整定义。它只需要存储一个指向Node<T>
的指针,它与任何其他指针一样,在4或8字节上表示(在大多数架构上)。因此,编译器不需要知道Node<T>
的完整定义。