Я пишу функцию для копирования шаблонного двоичного дерева. Пока у меня есть это:
template <typename Item, typename Key>
Node* BSTree<Item,Key>::copy(Node* root) {
if(root == NULL) return NULL;
Node* left;
Node* right;
Node* to_return;
left = copy(root->left());
right = copy(root->right());
to_return = new Node(root->data());
to_return->left() = left;
to_return->right() = right;
return to_return;
}
Но когда я пытаюсь скомпилировать программу, я получаю несколько ошибок, которые не могу понять, как их решить. Все они появляются в строке сразу после объявления шаблона.
1) ошибка C2143: синтаксическая ошибка: отсутствует ‘;’ до’*’
2) ошибка C4430: отсутствует указатель типа — предполагается int
3) ошибка C2065: «Элемент»: необъявленный идентификатор
4) ошибка C2065: «Ключ»: необъявленный идентификатор
Все остальные мои функции в программе компилируются правильно и не имеют проблем с шаблоном, поэтому я не совсем уверен, почему это происходит. Он уже объявлен в заголовочном файле и определенно имеет тип возвращаемого значения, так что я в замешательстве.
Является Node
подкласс BSTree
? Если это так, он не входит в область действия в типе возвращаемого значения, поэтому вы должны определить его:
template <typename Item, typename Key>
typename BSTree<Item,Key>::Node* BSTree<Item,Key>::copy(Node* root)
Если у вас есть C ++ 11, то auto
тоже работает:
template <typename Item, typename Key>
auto BSTree<Item,Key>::copy(Node* root) -> Node
Других решений пока нет …