以下是我的代码的一部分:
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>*&
,我不能只修改参数类型。
答案 0 :(得分:3)
好像你可能正在调用这样的函数:
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
是{{1}}的副本,并且不会修改原始文件。