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

标签 c++ pointers operator-keyword

这是我的部分代码:

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->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/

相关文章:

c++ - 重载键多重集的字符串运算符

c++ - Visual Studio 2012 中的 BadImageFormatExeption

c++ - 如何根据一对枚举的值选择一个 Action ?

将整数复制到指针结构变量

c - 如何编写更好的 strlen 函数?

c++ - 使用 ostream 和链接的运算符重载。为什么要通过引用返回?

c++ - 刷新文件读取缓存

c++ - 在模板类中将对象作为重载 operator+ 的参数传递

c++ - 如何理解复杂的数组声明指针,以及 &