Неожиданные ошибки, которые я не могу исправить

Я пишу функцию для копирования шаблонного двоичного дерева. Пока у меня есть это:

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: «Ключ»: необъявленный идентификатор

Все остальные мои функции в программе компилируются правильно и не имеют проблем с шаблоном, поэтому я не совсем уверен, почему это происходит. Он уже объявлен в заголовочном файле и определенно имеет тип возвращаемого значения, так что я в замешательстве.

1

Решение

Является 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
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector