2014-10-27 2 views
1

Я проектирую двоичное дерево поиска, которое позволяет пользователю вводить значение любого типа данных, а не только int.
Для этого я пытаюсь использовать шаблон со структурой. я определил мое-структуру следующим образомШаблон с структурой

template <class T> 
struct node 
{ 
    struct node *left; 
    T info; 
    struct node *right; 
}*root; 

Теперь я пытаюсь использовать это в классе под названием BST (бинарное дерево поиска)

template <class T> 
class bst 
{ 
    public: 
    void insert(node *,node *); 
    void inorder(node *); 
}; 

Но компилятор бросает ошибку, шаблон декларации 'node < T> * root'.
Как я могу использовать шаблон со структурными переменными?

ответ

2

Вы не можете объявить root после объявления класса шаблона, так как аргумент шаблона не может быть выведено, вы можете:

template <class T> 
struct node 
{ 
    struct node *left; 
    T info; 
    struct node *right; 
}; 

node <int> * root; 

и вы должны назначить тип параметра шаблона при использовании node, например:

template <class T> 
class bst 
{ 
    public: 
    void insert(node<T>*, node<T>*); 
    void inorder(node<T>*); 
}; 
+0

thnaks .. меня много. – Pradeep

0

Вы можете использовать ЬурейеЕ, чтобы ваш тип узла определен:

#include <iostream> 
#include <typeinfo> 

using namespace std; 

template <class T> 
struct node 
{ 
    node *left; 
    T info; 
    node *right; 

    typedef node<T>* root; 
}; 

int main() 
{ 
    node<int>::root root = new node<int>(); 
    cout<<typeid(root).name()<<endl; 

    return 0; 
} 
+0

имеет следующую ошибку. ** T не называет тип ** – Pradeep

+0

Это не отвечает на вопрос. – Columbo

+0

@Pradeep мой более ранний ответ был неправильным, поскольку я неправильно понял вопрос, проверьте сейчас. – Nik

1
template <class T> 
struct node 
{ 
    // […] 
} *root; 

Вы не можете объявить объект без типа. node - это шаблон, а не тип - какой тип должен иметь root?
Я считаю, что вы хотите, чтобы объявить его в bst:

template <class T> 
class bst 
{ 
    node<T>* root; 
    // ^^^ 
    // Supply the appropriate template arguments 

    // ... or use a typedef: 
    using node_type = node<T>; 

    // […] 
}; 
Смежные вопросы