2012-06-25 24 views
1

我有以下代码:C++类里声明一个类的变量

template <typename T> 
class Node{ 
public: 
    Node<T>(T data){ 
     this->data = data; 
    } 
    T data; 
    Node<T> left; 
    Node<T> right; 
}; 

但它不喜欢我怎么有相同类型的成员变量的类,他们是因为编译器不知道“节点”是什么。

回答

6

要声明leftrightNode<T> *

Node<T> *left; 
Node<T> *right; 

问题不只是编译器不具有完整的定义还没有,但你想说的一个节点包含两个其他节点,所以对节点的大小没有明确的定义。

0

创建转发类声明:

template<typename T> 
class Node; 

template<typename T> 
class Node { 
public: 
    T data; 
    Node<T> left, right; 
    // implementation here 
} 
0

此--->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 

};