2012-06-25 2 views
1

У меня есть следующий код:с ++ объявляя переменную класса внутри этого класса

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

Но это не нравится, как у меня есть переменные члены одного и того же типа, как класс, они находятся в так как компилятор не знает, что такое «Узел».

ответ

6

Вы хотите объявить left и right в Node<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 

};

Смежные вопросы