C++ 将一个对象的地址传递给另一个对象C++;

C++ 将一个对象的地址传递给另一个对象C++;,c++,reference,C++,Reference,我能做些什么来纠正这个错误?我想将obj2的地址存储到obj1中,这样它们的成员变量就变得相同(a=d,b=e,c=f),当我更改obj1的成员变量时,它也会在obj2中更改。您所做的就像42=64。这毫无意义。如果要存储对象的地址,可以使用指针对象: int main(){ Test obj1(a,b,c); Test obj2(d,e,f); &obj1=&obj2;//This line wont work saying lvalue required o

我能做些什么来纠正这个错误?我想将obj2的地址存储到obj1中,这样它们的成员变量就变得相同(a=d,b=e,c=f),当我更改obj1的成员变量时,它也会在obj2中更改。

您所做的就像
42=64
。这毫无意义。如果要存储对象的地址,可以使用指针对象:

int main(){

  Test obj1(a,b,c);

  Test obj2(d,e,f);

  &obj1=&obj2;//This line wont work saying lvalue required on left side

}

您也可以使用引用来完成类似的事情,但是由于您提到希望能够在声明之后重新绑定到不同的对象,指针更适合您的用例

因此,它们的成员变量变得相同(a=d,b=e,c=f),当我更改obj1的成员变量时,它也会更改obj2

你想要的不是指针或地址。您所描述的是一个参考:

Test obj1;
Test obj2;

Test * pobj = &obj1; // pointing to obj1
pobj = &obj2; // pointing to obj2
如果希望能够重新绑定引用,请使用:


你想解决的实际问题是什么?你想完成什么?是否要将
obj1
作为
obj2
的参考(因此
obj1
obj2
是同一个对象)?这与写入
7500=4344差不多应该做什么
&obj1=&obj2平均值或do?指针和引用概念应在任何情况下解释。简而言之,您不能这样做-
obj1
obj2
现在被声明为两个独立的对象,您不能更改它们的类型。但是,您可以为这些对象中的任何一个创建引用,通过引用所做的更改将影响原始对象。@HuzaifaImran不可能。引用变量必须在声明时初始化。正如答案所示,您可以使用指针变量。嗯,@Ayxan是的,正是这个。我一遍又一遍地看到同样的问题。OP有一个问题X,在解决这个问题时,他/她认为需要实现Y,因此主要询问Y,同时顺便提及X。然后,人们竞相求解Y,而不停地思考OP是否真的需要Y。在这种情况下,
X
是我引用的段落,Y是关于指针和地址的问题。OP在问题中从未提到指针。该问题表示“我想将obj2的地址存储到obj1中”,一条注释提到了一些约束。@Ayxan“我想将obj2的地址存储到obj1`中,这是XY问题中的Y。感谢您提高我对可重新绑定引用包装器对象的认识。我见过它们在模板元编程中使用,当时没有进行更深入的研究,因此我没有意识到它们的普遍适用性。“因为您提到您希望能够在声明后重新绑定到不同的对象,指针更适合您的用例。”我温和地表示强烈反对。如果你使用C++,那么使用C++。如果需要重新绑定,则<代码> STD::RealthyOnWrasePuth/C++ >是解决方案imHO。@ BoLooDoad是C++的一部分。代码>参考文献包装器< /C>是一个指针包装器。“指针是C++的一部分。”由这个逻辑,所以是“代码> Goto < /Calp>和<代码> Malc C < /C>和<代码> const char *STR =新char(20)< /代码>。它们是C++语法的一部分。但不应该使用C++的一部分。C++有更高层次的抽象,应该用它来代替。我承认C++中有一些使用指针的用例,但是除了使用C代码之外,它们是如此之少,这绝对不是其中之一。imho.
reference\u wrapper
实际上是一个指针包装器。而
while
实际上是一个
goto
包装器。@bolov虽然您提到的所有这些东西都可能被滥用,但它们都有自己的有效用例。任何东西都可能被滥用。如果您想要一个非所有者指针,这是一个完全有效的用例。
Test obj1(a,b,c);

Test& obj2 = obj1;
Test obj1(a,b,c);
Test obj1b(d,e,f);

auto obj2 = std::ref(obj1);
obj2 = obj1b;