//Node.cpp
Node::Node(DataType Item):item(Item)
{
lchild = 0;
rchild = 0;
}
DataType Node::getItem()
{
DataType anItem = item;
return anItem;
}
void Node::setItem(const DataType & data)
{
item = data;
}
Node* Node::getLChild() const
{
Node * p = lchild;
return p;
}
void Node::setLChild(Node * p)
{
lchild = p;
}
Node* Node::getRChild() const
{
Node * p = rchild;
return p;
}
void Node::setRChild(Node * p)
{
rchild = p;
}
Node::~Node()
{
}
//BST.cpp
DataType * BST::Search(const string name)
{
return Search(name, root);
}
DataType * BST::Search(const string name, Node * r)
{
if(r != 0)
{
if (name.compare(r->getItem().getname()) == 0)
return &(r->getItem());
else
{
if (name.compare(r->getItem().getname()) < 0)
return Search(name, r->getLChild());
else
return Search(name, r->getRChild());
}
}
else
return NULL;
}
//main.cpp
MyClass mc1("Tree","This is a tree");
MyClass mc2("Book","This is a book");
MyClass mc3("Zoo","This is a zoo");
BST tree;
tree.Insert(mc1);
tree.Insert(mc2);
tree.Insert(mc3);
MyClass * mc = tree.Search("Book");
if (mc != NULL)
cout << mc->getname() << endl;
問題は、検索機能から返されるMyClassオブジェクト(mc)です。バイナリ検索ツリー - 検索関数returnオブジェクト(C++)
私はSearch()にトレースし、 "r-> getItem()"が必要なものを取得していることを確認します。
"返品&(r-> getItem());" ?
ありがとうございます!代わりに、データ型* BST」の
++++++
私は少し混乱しています..私は、「データ型BST ::検索(定数文字列名)」に変更することができます ::検索( const string name) "....コンパイラが通過できないようです。 リターンNULLは、いくつかの問題を抱えているだろう...
が、私は、データ型*ノード:: getIthemを(変更するには、あなたの方法を試してみてください) 、それはまだエラーを持っている.... @@
'ノード::のgetItem()'何を返すのでしょうか? – juanchopanza
getItem()がMyClass(MyClass&ではない)を返し、 "return&(r-> getItem());"一時オブジェクトにアドレスを返します。一時オブジェクトはアクセス時に破棄されます。他のリターンはコンパイラによってブロックされるべきです。 – stefaanv