0

了解しました。(今のところ)不均衡な二分木を作成しようとしています。取り除くことができないような奇妙なエラーが発生しています。後半も同じエラーだったので、とりあえず取り除いた。

    void insert( binTreeNode < T >*& node, const T& obj) { // private version of insert( )
    if (obj < node->data) {
        if(node->left != NULL)
            insert(node->left, obj);
        else {
            binTreeNode<T> n;
            n = new binTreeNode(obj, NULL, NULL);
            node->left = n;
        }
    } else {
        if(node->right != NULL)
            insert(node->right, obj);
        else {

        }
    }
}

そしてエラー

In file included from ../src/binTree.cc:2:0:
../src/binTree.h: In member function 'void binTree<T>::insert(binTreeNode<T>*&, const T&)':
../src/binTree.h:54:16: error: expected type-specifier before 'binTreeNode'
../src/binTree.h:54:16: error: expected ';' before 'binTreeNode'
src/subdir.mk:24: recipe for target `src/binTree.o' failed
make: *** [src/binTree.o] Error 1

binTreeNodeのコンストラクターは次のように定義されます

binTreeNode (const T& obj, binTreeNode < T >* leftObj = NULL, binTreeNode < T >* rightObj = NULL) {
    left = leftObj;
    right = rightObj;
    data = obj;
}

ご協力いただきありがとうございます。

4

2 に答える 2

3
        n = new binTreeNode(obj, NULL, NULL);

する必要があります

        n = new binTreeNode<T>(obj, NULL, NULL);

(また、nはポインターでなければなりません)。

クラスは、明確な場合でも、コンストラクターからテンプレートパラメーターを自動推定しません。理由はわかりません。別のコンストラクターを追加してもコードが壊れないようにするためかもしれません。

とにかく、これが本当にあなたを悩ませているなら、あなたはいつでもヘルパー関数を追加することができます:

template<typename T>
binTreeNode<T>* newBinTreeNode(const T& obj, binTreeNode<T>* left, binTreeNode<T>* right) {
  return new binTreeNode<T>(obj, left, right);
}
于 2013-03-22T02:14:43.283 に答える
0

クラス宣言の外部でメンバー関数を定義するときは、の定義の前にプレフィックスinsert()を付ける必要があります。template<..>

template <typename T>
void binTree<T>::insert(binTreeNode < T >*& node, const T& obj) {
    if (obj < node->data) {
            if(node->left != NULL)
                insert(node->left, obj);
            else {
                binTreeNode<T> n;
                n = new binTreeNode(obj, NULL, NULL);
                node->left = n;
            }
    } else {
        if(node->right != NULL)
            insert(node->right, obj);
        else {

        }
    }
}
于 2013-03-22T01:43:01.523 に答える