我有以下代码:C++类里声明一个类的变量
template <typename T>
class Node{
public:
Node<T>(T data){
this->data = data;
}
T data;
Node<T> left;
Node<T> right;
};
但它不喜欢我怎么有相同类型的成员变量的类,他们是因为编译器不知道“节点”是什么。
我有以下代码:C++类里声明一个类的变量
template <typename T>
class Node{
public:
Node<T>(T data){
this->data = data;
}
T data;
Node<T> left;
Node<T> right;
};
但它不喜欢我怎么有相同类型的成员变量的类,他们是因为编译器不知道“节点”是什么。
要声明left
和right
为Node<T> *
:
Node<T> *left;
Node<T> *right;
问题不只是编译器不具有完整的定义还没有,但你想说的一个节点包含两个其他节点,所以对节点的大小没有明确的定义。
创建转发类声明:
template<typename T>
class Node;
template<typename T>
class Node {
public:
T data;
Node<T> left, right;
// implementation here
}
此--->Node<T> left,right
原因编译器错误。为了解决这个问题,你可以声明左边和右边是指针,引用或static
节点:
template<typename T>
class Node {
public:
Node(T data) : data(data){}
T data;
Node<T> *left, *right; // Ok
/* OR */
Node<T> &left, &right; // Ok
/* OR */
static Node<T> left, Node<T> right; // also Ok
Node<T> left, right; // No way, causes error
};