1

テンプレート化された二分木をコピーする関数を書いています。これまでのところ、私はこれを持っています:

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:'キー':宣言されていない識別子

プログラム内の他のすべての関数は正しくコンパイルされ、テンプレートに問題がないため、なぜこれが実行されるのかよくわかりません。それはすでにヘッダーファイルで宣言されており、間違いなくリターンタイプが割り当てられているので、私は困惑しています。

4

1 に答える 1

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
于 2012-12-05T03:33:49.353 に答える