Можно ли создать шаблон структуры внутри шаблона класса?
У меня есть шаблон класса BinarySearchTree
, внутри него я создаю структуры Node
. Node
должен быть такого же типа данных, как и BinarySearchTree
. Но компилятору не нравится написание Node<T>* = ...
, а если раскомментировать строчку перед struct Node
, то будет ошибка, так как T
определен выше.
#ifndef BINARYSEARCHTREE_H
#define BINARYSEARCHTREE_H
template <class T>
class BinarySearchTree {
public:
// здесь разные функции
private:
// template <class T>
struct Node {
T key_;
Node<T>* right_;
Node<T>* left_;
Node<T>* parent_;
Node(T key, Node* right = nullptr, Node * left = nullptr, Node * parent = nullptr)
: key_(key), right_(right), left_(left), parent_(parent)
{}
};
Node<T>* root_;
Node* iterativeSearchNode(const T& key) const;
};
template<class T>
BinarySearchTree<T>::Node *BinarySearchTree<T>::iterativeSearchNode(const T &key) const {
Node* current = root_;
while(current != nullptr) {
if (key > current->key_) {
current = current->right_;
} else if (key < current->key_) {
current = current->left_;
} else {
return current;
}
}
return nullptr;
}
#endif
Если же убрать <T>
везде, то у меня перестает работать функция, которая находится в private и возвращает 'Node'. Выдает такую ошибку error: need 'typename' before 'BinarySearchTree<T>::Node' because 'BinarySearchTree<T>' is a dependent scope