所以我有一个具有以下类型的受保护指针成员的类
int *assigntoThis; // In the constructor I have initialized this to NULL.
我还有一个具有以下声明的同一类的公共递归成员函数
bool find(int* parent, std::string nameofnode, int* storeParentinThis);
递归函数检查子节点,如果子节点的名称与作为参数传入的字符串匹配,它将为parentParentinThis分配父地址。
这是我从同一个类的另一个函数调用该函数的方法。
bool find(root, "Thread", assigntoThis);
但是,在运行时,当我输出存储在assigntoThis中的值时,我得到00000000 = NULL。如何在递归函数中更改assigntoThis的值?
答案 0 :(得分:3)
更改为:
bool find(int* parent, std::string nameofnode, int*& storeParentinThis);
说明:
这是原始代码的简化版本:
foo (int* p) { /// p bahaves as a local variable inside foo
p = 1;
}
int* p = 0;
foo(p);
// here p is still equal 0
这实际上类似于以下代码:
foo (int i) {
i = 1;
}
int i = 0;
foo(i);
// here i is still equal 0
我认为更容易理解。
因此,如果我们想从函数中返回一些内容,我们必须创建一个指向它的指针或对它的引用,然后用示例反向:
foo (int* i) { // pointer example
*i = 1;
}
int i = 0;
foo(&i);
// here i is equal to 1
foo (int& i) { // using reference example
i = 1;
}
int i = 0;
foo(i);
// here i is equal to 1
现在很容易将它应用到您的案例中:
// pointer example
bool find(int* parent, std::string nameofnode, int** storeParentinThis) {
*storeParentinThis = parent;
}
// reference example
bool find(int* parent, std::string nameofnode, int*& storeParentinThis) {
storeParentinThis = parent;
}