1

デフォルト パラメータとして以下の関数に書き込むと、ルート変数の非静的データ メンバが無効に使用されます。

class Leaf {
    Item* data;
    Leaf* parent;
    Leaf* left;
    Leaf* right;
    friend class binaryTree;

    Leaf(Item* data, Leaf* parent = 0, Leaf* left = 0, Leaf* right = 0) :
            data(data), parent(parent), left(left), right(right) {
    }
    ~Leaf() {
        delete left;
        delete right;
    }
};

class binaryTree {
    Leaf* root;
public:
    binaryTree() :
            root(0) {
    }

    ~binaryTree() {
        delete root;
    }

    void insert(Item* data, Leaf* &node = root) {
        if (!node) {
            node = new Leaf(data);
        } else {
            if (data->neptun < node->data->neptun) {
                insert(data, node->left);
            } else {
                insert(data, node->right);
            }
        }
    }

    void listForward(Leaf* node = root) {
        if (!node) {
            listForward(node->left);
            cout<<" "<<node->data->neptun;
            listForward(node->right);
        }
    }
};

どうすればこれを修正できますか? これらのプライベート関数を作成して、root in パラメーターのみを使用して別の関数を介して呼び出すような回避策を作成するのは好きではありません。前もって感謝します。

4

1 に答える 1

0

デフォルトのパラメーターを削除して、これら 2 つの余分な関数をクラス=rootに追加する だけですbynaryTree

void insert(Item* data) {
  insert(Item* data, root);
}
void listForward() {
  listForward(root);
}
于 2013-11-03T15:15:27.220 に答える