C++ 为什么';成员函数是否更改我的对象数据成员?

C++ 为什么';成员函数是否更改我的对象数据成员?,c++,visual-studio-2010,C++,Visual Studio 2010,所以我在为一个计算机科学课程做一个项目,我们需要创建一个二叉搜索树和一个相应的索引。我们需要在这个项目中使用递归 下面是我的类实现: class Leaf; struct indexEntries; class BinarySearchTree{ public: BinarySearchTree(); ~BinarySearchTree(); //Helper Functions for recursive calls s

所以我在为一个计算机科学课程做一个项目,我们需要创建一个二叉搜索树和一个相应的索引。我们需要在这个项目中使用递归

下面是我的类实现:

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;
};
使用调试器,我发现由leaf*parent指向的叶发生了更改,但这些更改没有转移到
leaf*BinarySearchTree::root
,这会使我的程序停止工作

调试器说我试图更改的数据的值是

CXX0030: Error: expression cannot be evaluated  

以前是否有人遇到过这种情况/知道如何解决它?

您对问题的分析完全正确:指针是按值传递的,因此调用方看不到函数对父函数的值所做的任何更改

解决此问题的一种方法是通过引用传递
parent
指针:

void BinarySearchTree::BuildTreeR(int start, int end, Leaf *& parent){
(注意添加的


这样,调用方将自动看到函数内部对
parent
所做的任何更改。

您对问题的分析完全正确:指针是按值传递的,因此函数对
parent
的值所做的任何更改对调用方都不可见

解决此问题的一种方法是通过引用传递
parent
指针:

void BinarySearchTree::BuildTreeR(int start, int end, Leaf *& parent){
(注意添加的


这样,调用方将自动看到函数中对父函数所做的任何更改。

我昨晚在项目到期之前就尝试过了。在实现和头文件中编辑它,但是对于我试图更改的所有数据,我仍然有相同的错误。我再次尝试使用它,现在它不会编译,说
'BinarySearchTree::BuildTreeR':无法将参数3从'Leaf*'转换为'Leaf*&'
@mcnnowak:您还需要更改
get_left()
get_right()
返回指向指针的引用(或指向指针的指针)。我昨晚在项目到期之前就尝试过了。在实现和头文件中编辑它,但是对于我试图更改的所有数据,我仍然有相同的错误。我再次尝试使用它,现在它不会编译,说
'BinarySearchTree::BuildTreeR':无法将参数3从'Leaf*'转换为'Leaf*&'
@mcnnowak:您还需要更改
get_left()
get_right()
返回对指针的引用(或指向指针的指针)。