最近、C++、つまりクラスとポインターをいじり始めました。同様の質問を探しましたが、何も役に立ちませんでした。
一部の情報を文字列形式 (char *) で保持する二分探索ツリー クラスがありますが、ツリーに新しいノードを追加した後、ジャンクが返されるため、情報を取得できません。
私のコードは次のようになります。
class Node
{
Node *lNode;
Node *rNode;
char *name;
public:
void setName(char *n) { name = n; }
char *getName() { return name; }
}
class Tree
{
Node *root;
Node *addNode(Node *, Node *);
public:
Tree() { root = NULL };
int addNewNode(Node *);
void print();
};
int Tree::addNewNode(Node *n)
{
root = addNode(root, n);
cout << root->getName() << endl; // this returns the name correctly
}
Node *Tree::addNode(Node *subtree, Node *node)
{
if(subtree== NULL)
{
subtree = node;
}
else if(node->getName() <= subtree->getLeft())
{
subtree->setLeft(addNode(subtree->getLeft(), node));
}
else
{
subtree->setRight(addNode(subtree->getRight(), node));
}
return subtree;
}
void Tree::print()
{
cout << root->getName() << endl; // this does not!
}
そして、これは私がメソッドを呼び出す場所です:
Tree *myTree = new Tree();
Node *n = new Node();
n->setName(name);
myTree->addNewNode(n);
ツリー変数は外部コンテナー クラスのプライベート メンバー属性であり、実際にはそのクラスの外部で作成されてコンストラクターに渡されます。addNewNode メソッドを呼び出すと、ノードがツリーに追加されますが、ルートに格納されているノードの名前を出力したい場合、ジャンクが表示されます。どこかにヘイワイヤーポインターがあると思いますが、一生見つけることができません。
どんな助けでも大歓迎です。