c ++声明该类中的类的变量

时间:2012-06-25 02:21:26

标签: c++ class variables

我有以下代码:

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

但它不喜欢我的成员变量与它们所在的类相同,因为编译器不知道“Node”是什么。

3 个答案:

答案 0 :(得分:6)

您想将leftright声明为Node<T> *

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

问题不仅在于编译器还没有完整的定义,而是你试图说Node包含两个其他节点,因此对于Node的大小没有合理的定义。

答案 1 :(得分:0)

创建转发类声明:

template<typename T>
class Node;

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

答案 2 :(得分:0)

这个---&gt; Node<T> left,right导致编译器错误。要修复它,您可以将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

};