-1

C++ の初心者で、数日後に予定されているプロジェクトのバイナリ ヒープ計算機を作成しようとしています。バイナリ ヒープに到達する前に、バイナリ ツリー構造体をヒープのスーパー クラスとして記述します。

私はまだ、ポインターと参照、および割り当て時にそれぞれがどのように見えるか、および何かをポインターまたは参照として定義する必要がある場合に頭を悩ませようとしています。

とにかく、ここに私が興味を持っているコードのいくつかがあります:

#include "BinaryTree.h"

int main(void){

    BinaryTree tempTree = new BinaryTree();
    BinaryNode* ptrToRoot;
    ptrToRoot = tempTree.getRootNode();

    int inputArr = { 5, 2, 7, 10, 11, 20, 1};

    for(int i = 0; i < sizeof(inputArr) / sizeof(inputArr[0]); i++){
            tempTree.binaryTreeInsert(ptrToRoot, inputArr[i]);
    }

    tempTree.inOrderPrint(ptrToRoot);
}

また、binaryTreeInsert と inOrderPrint の両方の呼び出しでエラーが発生します。どちらも引数として ptrToRoot を取ります。エラーには、「無効な引数...有効な候補は BinaryNode *, int.

しかし、Eclipse で各引数にカーソルを合わせると、どちらも必要な型であることが表示されます。

ポインターの定義が間違っていますか? 参考までに、BinaryTree クラスのヘッダー ファイルを次に示します。

#ifndef BINARYTREE_H_
#define BINARYTREE_H_

#include "BinaryNode.h"

struct BinaryTree  {

    BinaryTree();
    virtual ~BinaryTree(){}

    BinaryNode rootNode;
    int noOfNodes;

    BinaryNode* getRootNode(){ return rootNode; }

    int countNodes(BinaryNode* ptRootNode);
    bool binaryTreeContains( BinaryNode* ptRootNode, int element);
    void binaryTreeInsert(BinaryNode* ptRootNode, int element);
    void preorderPrint( BinaryNode *ptRootNode );
    void postorderPrint( BinaryNode *ptRootNode );
    void inorderPrint( BinaryNode *ptRootNode );
};

#endif
4

1 に答える 1

0

これは、少なくとも問題の一部である可能性があります。

BinaryTree tempTree = new BinaryTree();

この行は正しくありません。newヒープ割り当てを実行するために使用され、新しく割り当てられたオブジェクトへのポインターを返します。ただし、オブジェクトはスタックに割り当てられます。

これを次のように変更してみてください。

BinaryTree tempTree;

これにより、引数なしのコンストラクターを使用して、スタック上に新しいオブジェクトが構築されます。コンパイラがこの変数の型について混乱する可能性があるため、これで問題が解決する場合があります。

于 2012-11-11T04:02:09.997 に答える