C++ <type>*&类函数或结构错误

C++ <type>*& in class function or struct error

本文关键字:结构 错误 类函数 gt lt type C++      更新时间:2023-10-16

这是我的一部分代码:

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时,由于somefunction()参数中的<type>*&,编译器解释为v2->parent等于v1(谁是v2的父亲),并将v1修改为NULL,但我只想修改v2->parent值而不是v1

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

似乎你可能像这样调用函数:

somefunction(v2->parent, v2);

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

你说你不能修改参数类型,但我建议你这样做。拥有对指针的引用是一个非常糟糕的信号。看来你的代码需要重新设计了。

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

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

现在函数中的v1v2->parent的副本,不会修改原始的