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

Ошибки при перегрузке операторов - C++

Восстановить пароль Регистрация
 
Милашечка
0 / 0 / 0
Регистрация: 16.02.2013
Сообщений: 98
18.05.2014, 12:39     Ошибки при перегрузке операторов #1
Ну не могу,не получается самостоятельно разобрать свои ошибки((
Они по большей части повторяются. Помогите пожалуйста.

ошибки следующие:
14 `Matrica Matrica::operator<(Matrica&, Matrica&)' must take exactly one argument
In function `Matrica operator<(Matrica&, Matrica)':
58 no match for 'operator=' in 'rez = P1->Matrica::stroka'
note D:\Ó×ÅÁÀ\àëãîðèòìè÷åñêèå ÿçûêè\21.cpp:15 candidates are: Matrica Matrica::operator=(Matrica&)
59 no match for 'operator=' in 'rez = P2.Matrica::stroka'
note :15 candidates are: Matrica Matrica::operator=(Matrica&)
In member function `Matrica Matrica::operator=(Matrica&)':
63 no matching function for call to `Matrica::Matrica(int&)'
noteD:\Ó×ÅÁÀ\àëãîðèòìè÷åñêèå ÿçûêè\21.cpp :6 candidates are: Matrica::Matrica(const Matrica&)
note D:\Ó×ÅÁÀ\àëãîðèòìè÷åñêèå ÿçûêè\21.cpp:6 Matrica::Matrica()
In function `int main()':
92 no match for 'operator=' in 'V = operator<(Matrica&, Matrica)(M2)'
note D:\Ó×ÅÁÀ\àëãîðèòìè÷åñêèå ÿçûê
è\21.cpp:63 candidates are: Matrica Matrica::operator=(Matrica&) [/I]

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
95
#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 Matrica
     { float *x;  float *a;
       public:float sum, min; int stroka;int k;int n,m;
              Matrica(); 
              void vvod();
              void vivod(); 
              void min_sum_el();
              void vivod_stroka();
              void ww();
              Matrica  operator< (Matrica& ob1, Matrica& ob2);
              Matrica  operator=(Matrica& ob2);
              ~Matrica(){delete[]x; puts("rabotal destryktor\n");}                
     };
     
  Matrica::Matrica()
  {/*printf("\nvvedite razmernost n*m: ");*/
     scanf("%d %d",&n,&m);
     puts("\nrabotal konstruktor matrici\n");    
    } 
 //==============================================//   
 void Matrica:: vvod()    
      {x = new float [n*m]; 
      for(int i = 0; i < n; i++)
      for(int j = 0; j < m; j++)
      *(x + i * m + j) = rand() % 101 - 50;
      }
//==============================================//
 void Matrica::vivod()/*vivodit matrici na ekran*/
    {printf("\nmatrica:\n"); 
     for(int i = 0; i < n; i++)
     {for(int j = 0; j < m; j++)
      cout<<*(x + i * m + j)<< " ";
      cout << "\n";
     }  
    }
//==============================================//    
 void Matrica::min_sum_el()
  {min = 1000;/*prinimayem za minimum samoye bolshoye chislo tipa  1000*/
   for(int i = 0; i < n; i++)/*idem po strokam*/
   {sum = 0;/*snachala summa v stroke=0*/
    for(int j = 0;  j < m; j++)/*idem po stroke*/
       sum+= *(x + i * m + j);/*summiruyem yeye elementy*/
        if (sum < min) 
        {min = sum; stroka = i + 1;}/*esli summa v dannoy stroke menshe chem predydushchiy minimum to eto minimum i zapomnim nomer stroki*/
   }
  }
 //==============================================//      
  void Matrica::vivod_stroka()
  {printf("Minimalnaya summa= %3.2f v stroke %d ",min, stroka); printf("\n");}
   //==============================================//  
  
Matrica  operator<(Matrica& P1, Matrica P2)  
   {Matrica rez; 
   if (P1.stroka < P1.stroka) rez = P1.stroka;
    else rez = P2.stroka;
       return rez;   }
  //==============================================//         
Matrica Matrica::operator=(Matrica& P1)
{Matrica rez(P1.n);
for(int i = 0; i < n; i++)
*(a + i * m) = *(P1.x + i*P1.m);
return * this;
}
 
  //==============================================//  
void Matrica::ww()
{for(int i = 0; i < n; i++)
      cout<<*(a + i)<< " ";
      cout << "\n";
}                
 
int main()
{Matrica M1;
 M1.vvod();
 M1.vivod();
 M1.min_sum_el();
 M1.vivod_stroka();
 system("pause");
 
 Matrica M2;
 M2.vvod();
 M2.vivod();
 M2.min_sum_el();
 M2.vivod_stroka();
 system("pause");
 
 Matrica V;
 V = M1 < M2;
 V.ww();
 system("pause");
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.05.2014, 12:39     Ошибки при перегрузке операторов
Посмотрите здесь:

При перегрузке операторов не записывает значение C++
Ошибка при перегрузке операторов. C++
Тестовые вопросы по перегрузке операторов C++
О перегрузке операторов C++
Ошибка при перегрузке операторов в классе C++
Сколько используется параметров при перегрузке унарных операторов как френд-функций? C++
C++ Ошибка в перегрузке операторов?
Можно ли при перегрузке операторов задавать дополнительные параметры? C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
18.05.2014, 13:09     Ошибки при перегрузке операторов #2
Цитата Сообщение от Милашечка Посмотреть сообщение
Matrica Matrica::operator<(Matrica&, Matrica&)' must take exactly one argument
Т.к. оператор в данном случае объявлен как член-класса, то он автоматически принимает неявный параметр this. Поэтому сигнатура должна включать единственный явный аргумент:
C++
1
bool Matrica::operator<(const Matrica&) // Обрати ещё внимание на возвращаемый тип
Yandex
Объявления
18.05.2014, 13:09     Ошибки при перегрузке операторов
Ответ Создать тему
Опции темы

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