1

私は次のコードを持っています:

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

しかし、コンパイラーは「ノード」が何であるかを知らないので、それらが属するクラスと同じタイプのメンバー変数をどのように持っているかは気に入らない。

4

3 に答える 3

6

あなたは宣言したいとleft思いrightますNode<T> *

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

問題は、コンパイラがまだ完全な定義を持っていないことだけでなく、ノードに他の2つのノードが含まれていると言おうとしているため、ノードのサイズについて適切な定義がないことです。

于 2012-06-25T02:22:57.477 に答える
0

転送クラス宣言を作成します。

template<typename T>
class Node;

template<typename T>
class Node {
public:
   T data;
   Node<T> left, right;
   // implementation here
}
于 2012-06-25T02:28:05.767 に答える
0

これ --->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

};

于 2012-06-26T16:14:30.080 に答える