我无法解决的意外错误

时间:2012-12-05 03:24:38

标签: c++ templates compiler-errors binary-tree

我正在编写一个复制模板化二叉树的函数。到目前为止,我有这个:

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 个答案:

答案 0 :(得分:2)

NodeBSTree的子类吗?如果是这样,它不在返回类型的范围内,因此您必须对其进行限定:

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