我正在编写一个复制模板化二叉树的函数。到目前为止,我有这个:
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:'密钥':未声明的标识符
程序中的所有其他函数都正确编译,模板没有问题,所以我不确定为什么这样做。它已经在头文件中声明,并且肯定有一个返回类型,所以我很难过。
答案 0 :(得分:2)
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