Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
murtukov
 Аватар для murtukov
8 / 8 / 3
Регистрация: 30.01.2013
Сообщений: 99
#1

Почему не работает двойное присваивание? - C++

13.09.2013, 19:07. Просмотров 1117. Ответов 8
Метки нет (Все метки)

Всем привет.

Не могу понять, почему не работает двойное присваивание в строке 28. Код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
using namespace std;
////////////////////////////////////////////////////////////////
class alpha
   {
   private:
      int data;
   public:
      alpha()
         { }
      alpha(int d)
         { data = d; }
      int getData()
         { return data; }
      alpha operator = (alpha& a)
         {
         data = a.data;
         return alpha(data);
         }
   };
////////////////////////////////////////////////////////////////
int main()
   {
   alpha a1(37);
   alpha a2;
   alpha a3;
 
   a3 = a2 = a1;
   
   cout << "\na2=" << a2.getData();
   cout << "\na3=" << a3.getData();
   cout << endl;
   
   return 0;
   }

Лог:
no match for 'operator=' in 'a3 = a2.alpha::operator=((* & a1))'|

Всем спасибо, за объяснение.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2013, 19:07     Почему не работает двойное присваивание?
Посмотрите здесь:

Теория. Почему в данном случае copy() не работает после reserve(), но работает после resize()? C++
Не могу понять почему не работает (или правильно не работает) C++
Почему не работает C++
C++ почему не работает?
Присваивание операторов (хз почему не робит) C++
C++ Почему в динамическом массиве не работает то, что работает со статическим?
Почему работает присваивание C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Cynacyn
 Аватар для Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
13.09.2013, 19:14     Почему не работает двойное присваивание? #2
Оператор присваивания возвращать ссылку.
Jupiter
Каратель
Эксперт C++
6547 / 3967 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
13.09.2013, 19:17     Почему не работает двойное присваивание? #3
Цитата Сообщение от murtukov Посмотреть сообщение
C++
1
2
3
4
5
alpha operator = (alpha& a)
{
data = a.data;
return alpha(data);
}
C++
1
2
3
4
5
6
7
alpha& operator = (const alpha& a)
{
    if (&a != this)
        data = a.data;
 
    return *this;
}
Cynacyn
 Аватар для Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
13.09.2013, 19:20     Почему не работает двойное присваивание? #4
Уже ответили (:
murtukov
 Аватар для murtukov
8 / 8 / 3
Регистрация: 30.01.2013
Сообщений: 99
13.09.2013, 19:43  [ТС]     Почему не работает двойное присваивание? #5
Jupiter, я знаю про возвращение по ссылке. Меня интересует, почему мой код не работает.
gray_fox
What a waste!
 Аватар для gray_fox
1249 / 1132 / 54
Регистрация: 21.04.2012
Сообщений: 2,357
Завершенные тесты: 3
13.09.2013, 20:31     Почему не работает двойное присваивание? #6
Цитата Сообщение от murtukov Посмотреть сообщение
Меня интересует, почему мой код не работает.
Потому что (a1 = a2) вернёт временный объект, а его нельзя привязать к ссылке не на константу.
murtukov
 Аватар для murtukov
8 / 8 / 3
Регистрация: 30.01.2013
Сообщений: 99
13.09.2013, 21:30  [ТС]     Почему не работает двойное присваивание? #7
gray_fox, не совсем понимаю, о какой ссылке идет речь и причем здесь выражение a1 = a2, если я не прописывал его в коде

Добавлено через 2 минуты
gray_fox, скажите пожалуйста, что выполняется первым в выражении a3 = a2 = a1. Сначала a2 = a1?
Kuzia domovenok
 Аватар для Kuzia domovenok
1886 / 1741 / 117
Регистрация: 25.03.2012
Сообщений: 5,916
Записей в блоге: 1
13.09.2013, 21:37     Почему не работает двойное присваивание? #8
ну отвлекись от операторов.
Представь просто функцию alfa f(a, b)
Тогда нельзя будет написать так f(a, b)=c
А вот если возвращается ссылка, alfa& f(a, b)
то тогда можно написать f(a, b)=c
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.09.2013, 22:00     Почему не работает двойное присваивание?
Еще ссылки по теме:

C++ Почему не работает if-else
Почему программа не работает на MFC статичной библиотеки. а вот на стандартном мфс работает C++
C++ Нужно ввести дату в формате dd.mm.yyyy - не работает присваивание
C++ Почему выводится в виде таблицы и почему не работает сортировка
Почему не работает cin.clear() и как работает sync()? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
gray_fox
What a waste!
 Аватар для gray_fox
1249 / 1132 / 54
Регистрация: 21.04.2012
Сообщений: 2,357
Завершенные тесты: 3
13.09.2013, 22:00     Почему не работает двойное присваивание? #9
Цитата Сообщение от murtukov Посмотреть сообщение
о какой ссылке идет речь
Об этой
alpha operator = (alpha& a)
Добавлено через 5 минут
Цитата Сообщение от murtukov Посмотреть сообщение
что выполняется первым в выражении a3 = a2 = a1. Сначала a2 = a1?
Да. Можно записать так
C++
1
a3.operator =(a2.operator =(a1));
Добавлено через 3 минуты
Результат a2.operator =(a1) - временное значение - нельзя использовать в качестве аргумента для вызова a3.operator =(...), т.к. твой operator = принимает ссылку на не константу.
Yandex
Объявления
13.09.2013, 22:00     Почему не работает двойное присваивание?
Ответ Создать тему
Опции темы

Текущее время: 07:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru