0

这是我的代码的一部分:

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 的父亲),并且它修改v1NULL,但我只想修改v2->parentvalue 而不是v1

PS.:我需要<type>*&在代码下面的某些部分使用,我不能只修改参数类型。

4

1 回答 1

3

似乎您可能正在调用这样的函数:

somefunction(v2->parent, v2);

这意味着v2->parent函数内部与函数内部完全相同的对象v1。当您设置v2->parentv1->parent(即NULL)时,您也在修改v1

你说你不能修改参数类型,但我建议你这样做。对指针的引用是一个非常糟糕的迹象。您的代码似乎需要重新设计。

v2->parent另一种方法是在将其传递给函数之前进行复制:

Node* v1 = v2->parent;
somefunction(v1, v2);

现在v1函数里面是这个副本,v2->parent不会修改原来的。

于 2013-03-06T23:57:07.997 回答