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

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

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

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

13.09.2013, 19:07. Просмотров 1286. Ответов 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))'|

Всем спасибо, за объяснение.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.09.2013, 19:07
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему не работает двойное присваивание? (C++):

Почему работает присваивание - C++
Пример из книги. Немогу понять, почему работает присваивание в main.cpp, ведь оператор = не перегружен?!?! //Complex.h ...

Присваивание операторов (хз почему не робит) - C++
Собственно завело в ступор то, что программа не работает. Просто реально теперь у меня ступор почему не работает. Ошибка: (13): error...

Нужно ввести дату в формате dd.mm.yyyy - не работает присваивание - C++
Создал свой класс date. Принцип работы прост. Просто нужно ввести дату в формате dd.mm.yyyy Возникли следующие вопросы: 1) Почему не...

Почему выводится в виде таблицы и почему не работает сортировка - C++
почему выводится в виде таблицы? почему не работает сортировка? и как туда можно вставить классы комнат? hotel.h #include...

Почему программа не работает на MFC статичной библиотеки. а вот на стандартном мфс работает - C++
почему программа не работает на MFC статичной библиотеки. а вот на стандартном мфс работает. Имею в ввиду что сделал прогу которая меняет...

Почему не работает cin.clear() и как работает sync()? - C++
#include&lt;iostream&gt; #include&lt;cstring&gt; using namespace std; char*input(char*ch,int&amp;n){ cin.getline(ch,20); //cin.sync(); ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
13.09.2013, 19:14 #2
Оператор присваивания возвращать ссылку.
2
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 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;
}
1
Cynacyn
33 / 33 / 0
Регистрация: 02.05.2013
Сообщений: 109
13.09.2013, 19:20 #4
Уже ответили (:
1
murtukov
8 / 8 / 3
Регистрация: 30.01.2013
Сообщений: 99
13.09.2013, 19:43  [ТС] #5
Jupiter, я знаю про возвращение по ссылке. Меня интересует, почему мой код не работает.
0
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 3
13.09.2013, 20:31 #6
Цитата Сообщение от murtukov Посмотреть сообщение
Меня интересует, почему мой код не работает.
Потому что (a1 = a2) вернёт временный объект, а его нельзя привязать к ссылке не на константу.
1
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?
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
13.09.2013, 21:37 #8
ну отвлекись от операторов.
Представь просто функцию alfa f(a, b)
Тогда нельзя будет написать так f(a, b)=c
А вот если возвращается ссылка, alfa& f(a, b)
то тогда можно написать f(a, b)=c
1
gray_fox
What a waste!
1520 / 1223 / 70
Регистрация: 21.04.2012
Сообщений: 2,560
Завершенные тесты: 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 = принимает ссылку на не константу.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.09.2013, 22:00
Привет! Вот еще темы с ответами:

Почему в библиотеке не работает то, что спокойно работает в программе? - C++
День всем добрый! Я здесь решил собрать библиотеку для конструктора игр Game Maker. Хотел поэкспериментировать. Как всегда, у...

Не могу понять почему не работает (или правильно не работает) - C++
#include &lt;iostream.h&gt; #include &lt;conio.h&gt; #define N 5 #define M 3 void main() { int a; int i,j; cout&lt;&lt;&quot;nachalnya...

Почему в динамическом массиве не работает то, что работает со статическим? - C++
Программа зависает #include&lt;iostream&gt; #include&lt;stdlib.h&gt; #include&lt;time.h&gt; using namespace std; int main() { ...

Теория. Почему в данном случае copy() не работает после reserve(), но работает после resize()? - C++
Есть такая функция: void Array::SetStartIndexes(sz3_Arr_t *array) { start_index.reserve(array-&gt;size()); ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.09.2013, 22:00
Ответ Создать тему
Опции темы

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