私はバイナリ検索ツリーと対応するインデックスを作成する必要があるコンピュータサイエンスクラスのプロジェクトに取り組んでいました。このプロジェクトでは再帰を使用する必要がありました。ここでメンバー関数が自分のオブジェクトデータメンバーを変更しないのはなぜですか?
は私のクラスの実装です:
class Leaf;
struct indexEntries;
class BinarySearchTree{
public:
BinarySearchTree();
~BinarySearchTree();
//Helper Functions for recursive calls
std::string search(std::string);
void BuildTree(std::string);
void inOrderPrint();
private:
//Recursive Functions
void BuildTreeR(int start, int end, Leaf * r);
void inOrderPrint(Leaf * start);
Leaf * search(std::string inquiry, Leaf * start);
void DeallocateTree(Leaf * start);
//Data members
Leaf * root;
std::vector<indexEntries> BSTindex;
};
class Leaf{
public:
Leaf(){
indexID = "";
AccNum = "";
left = NULL;
right = NULL;
};
void set_index(std::string input) {indexID = input;};
void set_AccNum(std::string input) {AccNum = input;};
void set_left(Leaf* newLeft) {left = newLeft;};
void set_right(Leaf* newRight) {right = newRight;};
std::string get_index() {return indexID;};
std::string get_AccNum() {return AccNum;};
Leaf * get_left() {return left;};
Leaf * get_right() {return right;};
private:
std::string indexID;
std::string AccNum;
Leaf * left;
Leaf * right;
};
そして私は根がそのまま行くために指している機能ボイドBinarySearchTree::BuildTreeR(int, int, Leaf*)
リーフにLeaf * BinarySearchTree::root
を渡すためにしてみてください。
は私BuildTreeR()関数です:
void BinarySearchTree::BuildTreeR(int start, int end, Leaf * parent){
int mid = (start+end)/2;
if(parent == NULL){
parent = new Leaf;
parent->set_index((BSTindex[mid]).indexID);
std::string fullEntry = BSTindex[mid].dataBaseEntry;
parent->set_AccNum(fullEntry.substr(4, 3));
}
if((mid-1)>start){
BuildTreeR(start, mid-1, parent->get_left());
}
if((mid+1)<end){
BuildTreeR(mid+1, end, parent->get_right());
}
}
デバッガを使用して、私は葉が*親が変更されますが、これらの変更はLeaf * BinarySearchTree::root
に引き継がれていない、私を停止するリーフで指されることがわかりましたプログラムは働いています。
デバッガは/それを修正する方法を知っている私は変更しようとしているデータの値が
CXX0030: Error: expression cannot be evaluated
が、これは前に発生していた誰もが持っていると言っていますか?
私はその昨夜、プロジェクトが完了する前に試してみました。実装とヘッダーファイルの両方で編集しましたが、変更しようとしていたすべてのデータに対して同じエラーがありました。 – mcnnowak
これをもう一度使ってみようとしましたが、 '' BinarySearchTree :: BuildTreeR ': 'Leaf *'から 'Leaf *'へパラメータ3を変換できません。 – mcnnowak
@mcnnowak:' get_left() 'と' get_right() 'はポインタへの参照(またはポインタへのポインタ)を返します。 – NPE