这是我的部分代码:
class Node{
public:
Node* parent;
Node* left;
Node* right;
int key;
};
(...)
/*
* Ps.: v1 is parent of v2!
* and assume that v1->parent is NULL
*/
void somefunction(Node*& v1,Node*& v2){
(...)
v2->parent = v1->parent; // The problem is here, more details below
(...)
}
问题是当我调用 v2->parent
时, 因为 <type>*&
在 somefunction()
的论点中,编译器解释为 v2->parent
等于v1
(谁是 v2 的父亲),它修改了 v1
至 NULL
, 但我只想修改 v2->parent
值而不是 v1
.
PS.: 我需要使用 <type>*&
在我的代码下面的某些部分,我不能只修改参数类型。
最佳答案
看起来你可能是这样调用函数的:
somefunction(v2->parent, v2);
这意味着函数内部的 v2->parent
与函数内部的 v1
是完全相同的对象。当您将 v2->parent
设置为 v1->parent
(即 NULL
)时,您正在修改 v1
还有。
你说你不能修改参数类型,但我建议你这样做。引用指针是一个非常糟糕的迹象。您的代码似乎需要重新设计。
另一种方法是在将 v2->parent
传递给函数之前复制它:
Node* v1 = v2->parent;
somefunction(v1, v2);
现在函数中的v1
就是v2->parent
的拷贝,不会修改原来的。
关于C++ <type>*& 类函数或结构错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15260513/