передать адрес объекта другому объекту C ++ - PullRequest
3 голосов
/ 05 мая 2020
int main(){

  Test obj1(a,b,c);

  Test obj2(d,e,f);

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

}

Что я могу сделать, чтобы исправить эту ошибку? Я хочу сохранить адрес obj2 в obj1, чтобы их переменные-члены стали одинаковыми (a = d, b = e, c = f), и когда я изменяю переменную-член obj1, она также изменяется в obj2.

Ответы [ 2 ]

4 голосов
/ 05 мая 2020

То, что вы делаете, похоже на 42 = 64. Это не имеет никакого смысла. Если вы хотите сохранить адрес объекта, вы можете использовать объект-указатель:

Test obj1;
Test obj2;

Test * pobj = &obj1; // pointing to obj1
pobj = &obj2; // pointing to obj2

Вы также можете использовать ссылку на выполнение sh чего-то похожего, но, поскольку вы упомянули, вы хотите иметь возможность для повторной привязки к другому объекту после объявления указатели лучше подходят для вашего варианта использования.

2 голосов
/ 05 мая 2020

, поэтому их переменные-члены становятся одинаковыми (a = d, b = e, c = f), и когда я изменяю переменную-член obj1, она также изменяется в obj2.

Вам нужны не указатели или адреса. То, что вы описываете, является ссылкой:

Test obj1(a,b,c);

Test& obj2 = obj1;

Если вы хотите иметь возможность повторно привязать ссылку, используйте std::reference_wrapper:

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

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