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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Маринчик
0 / 0 / 0
Регистрация: 12.10.2012
Сообщений: 148
#1

No match for 'operator=' . Что не так? - C++

18.05.2014, 17:36. Просмотров 2582. Ответов 4
Метки нет (Все метки)

во всей программе выбивает только одну ошибку.. надоел этот вопрос но что не так????????
92 no match for 'operator=' in 'P3 = operator<(matr&, matr&)(((matr&)(&P2)))'


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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include<iostream>/*zagolovochnij fajl s klassami, funktsijami i peremennimi dlja organizacii vvoda-vivoda v jazike programmirovaniya C++*/
/*#include <stdlib.h>*/
using namespace std;/*ob'javlenie prostranstva imen  std.*/
 
class matr
{ public:
  float  *x;
  int n,m;
  public:
  matr(int, int);
  matr (matr& f);
  void vvod();
  void ww();
  friend matr  operator+(matr& ob1, matr& ob2);
  matr&  operator=(matr& ob2);
  ~matr();
};
//==============================================
//konstryktor s parametrami
matr::matr(int _n, int _m)
{    n=_n; m=_m;
     x=new float [n*m];
     puts("\n konstryktor ");
}
//==============================================
//konstryktor kopii
matr::matr(matr& f)
  {
  n=f.n;
  m=f.m;
  x=new float [n*m];
 for(int i=0; i<n; i++)
 for(int j=0; j<m; j++)
*(x+i*m+j)=*(f.x+i*f.m+j);
  cout <<" rabotal konstryktor kopii  ";
  }
//==============================================
 
void matr::vvod()
{
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
*(x+i*m+j)=rand() % 101 - 50;
}
//==============================================
 
matr::~matr ()
{
delete[]x;
puts("\n rabotal destryktor");
}
//==============================================
 
matr  operator<(matr& P1, matr& P2)
{
matr rez(P1.n, P1.m);
puts("\n rez dla + ");
for(int i=0;i<rez.n;i++)
for(int j=0;j<rez.m;j++)
*(rez.x +i*rez.m+j)=*(P1.x+i*P1.m+j)+*(P2.x+i*P2.m+j);
return rez;
}
//==================================
matr& matr::operator=(matr& P2)
{
matr rez(P2.m,P2.n);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
*(x+i*m+j)=*(P2.x+i*P2.m+j);
return * this;
}
//==================================
void matr::ww()
{
for(int i=0;i<n;i++)
{
cout<<"\n" ;
for(int j=0;j<m;j++)
cout<< *(x+i*m+j)<<"  "; }
}
//==================================
 
int main()
{
matr P1(3,4);
P1.vvod();
P1.ww();
matr P2(3,4);
P2.vvod();
P2.ww();
matr P3(3,4);
P3=P1<P2;
P3.ww();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2014, 17:36
Я подобрал для вас темы с готовыми решениями и ответами на вопрос No match for 'operator=' . Что не так? (C++):

No match for 'operator<<' - C++
имеется простой класс и программа для его тестирования. В программе имеется функция принимающая ссылку на экземпляр класса и выводящая на...

Error: no match for 'operator!=' - C++
код метода: // lnum это vector&lt;int&gt; , base - const int void Verylong::normal() { for (auto i = lnum.begin(); i !=...

Ошибка: no match for 'operator>>' - C++
Не могу понять в чем проблема, объясните пожалуйста..

Ошибка: no match for 'operator<<' - C++
Добрый вечер! Отрывок из main() cout &lt;&lt; &quot;\n\n LIST &quot; &lt;&lt; endl; list&lt;GradStudent&gt; l; list&lt;GradStudent&gt;::iterator it; ...

Code::blocks error: no match for 'operator[]' in 'SP[i]' - C++
Собственно всё в названии, почему-то оператор ждёт чего-то другого, по форуму поискал ничего не подошло, может помогут знатоки. Вроде бы...

Ошибка при запуске проекта: error: no match for ‘operator>>’ - C++
В NetBeans создал проект: Добавлено через 1 минуту #include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int main()...

4
zss
Модератор
Эксперт С++
6928 / 6490 / 2182
Регистрация: 18.12.2011
Сообщений: 17,105
Завершенные тесты: 1
18.05.2014, 18:07 #2
VS 2008 компилирует без ошибок.
Может важно, что в функции operator= написано return * this;
а не return *this; (без пробела)
1
Маринчик
0 / 0 / 0
Регистрация: 12.10.2012
Сообщений: 148
18.05.2014, 18:42  [ТС] #3
а мы в Dev-C++ работаем. и у меня выбивает ошибку((((
0
DU
1485 / 1131 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
18.05.2014, 18:58 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
а зачем у вас конструктор копирования, оператор = и прочие принимают неконстантную ссылку?
в этих функциях передаваемые объекты меняются? нет. значит нужно константную.
в вашем случае идет попытка вызова оператора =, которому передается временный объект (результат оператора <).
неконстантные ссылки не строятся из временных объектов. это запрещено. кстати, студия такую ошибку почему-то
не считает за ошибку.
короче, сделайте все аргументы своих функций константными ссылками, если внутри функций передаваемый
объект не изменяется.
1
zss
Модератор
Эксперт С++
6928 / 6490 / 2182
Регистрация: 18.12.2011
Сообщений: 17,105
Завершенные тесты: 1
18.05.2014, 19:06 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ссылки надо сделать константными в равно и в копиконструкторе
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//konstryktor kopii
matr::matr(const matr& f)
  {
  n=f.n;
  m=f.m;
  x=new float [n*m];
 for(int i=0; i<n; i++)
 for(int j=0; j<m; j++)
*(x+i*m+j)=*(f.x+i*f.m+j);
  cout <<" rabotal konstryktor kopii  ";
  }
//==================================
matr& matr::operator=(const matr& P2)
{
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
*(x+i*m+j)=*(P2.x+i*P2.m+j);
return *this;
//  ???????????? что будет, если размерности разные  ???????????
}
1
18.05.2014, 19:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.05.2014, 19:06
Привет! Вот еще темы с ответами:

Ошибка при использовании перегруженного оператора вывода в поток: no match for 'operator<<' - C++
Пытаюсь написать класс комплексных чисел, но не могу сделать вот что: #include &lt;iostream&gt; #include &quot;head.h&quot; using namespace std; ...

Ошибка в коде "no match for 'operator[]' (operand types are 'Student' and 'int')" - C++
Помогите пожалуйста разобраться, в чём проблема? Весь код: #include &quot;windows.h&quot; #include &lt;stdio.h&gt; #include &lt;string.h&gt; #include...

Ошибка на "cout <<" no match for operator operand types are std::basic_ostream char - C++
Немного слов про код.Данный код создан для выдачи номера машины,цвета,марки при предоставлении имени.Знаю,что код можно было написать проще...

Устранить ошибку "no match for operator" - C++
#include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; class Firm { public: Firm(); Firm(string n,...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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