Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2014, 01:33   #1
lisica198808
Пользователь
 
Регистрация: 06.11.2012
Сообщений: 64
По умолчанию no match for 'operator='

Не могу понять, что этой программке еще нужно
Код:
#include<iostream>
using namespace std;
class matrica;
class massiv
	{ public:float *a;  int n;float sum1;
             	 massiv();
	         void vivod();
	         massiv& massiv:: operator=(massiv& /*ob*/);
	         massiv  ( massiv & f);
	         void sum_el();
	         void vivod_sum_el();
             ~massiv()
             {delete[]a; puts("rabotal destryktor\n");}    
   };
 //=====================//
  massiv::massiv()
    {printf("\nvvedite razmer massiva n: ");
     scanf("%d",&n);
     a = new float[n];
     puts("\nrabotal konstruktor massiva\n");
    }
//======================//
  void massiv::vivod()
    {for( int i = 0; i < n; i++  )
     printf("%3.1f ", *(a+i));
    }
////===================//
  void massiv::sum_el()
    {sum1 = 0;
     for(int i = 0; i < n;i++)
      {sum1+=*(a+i);}
    }
//=====================//
  void massiv::vivod_sum_el()
    {printf("\nsumma elementov massiva= %3.2f",sum1); printf("\n");}
//======================/
  massiv& massiv::operator=(massiv& P2)
    {for(int i = 0; i < n; i++)
     *(a +  i)  = *(P2.a + i);
     return * this;
    }
//=================//
  massiv::massiv(massiv & f)/*konstruktor kopii massiva*/
    {n=f.n;
     a = new float [n];
     for(int i = 0; i < n; i++)
      *(a + i) = *(f.a + i);
     cout <<" \n rabotal konstruktor kopii  ";
    }
//===================//
class matrica
	{ float *x;
	  int n,m;
	  public:
         	float sum,min_s;float sum2;
	        int stroka; int i,j;int kol_str;
	        matrica();
	        void vvod();
	        void vivod();
	        void sum_el();
            void vivod_sum_el();
            void min_str();
	        massiv  operator<<( /*const*/ matrica &);
	        matrica operator-(massiv &mas);
  	        ~matrica(){delete[]x; puts("rabotal destryktor matrici\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()
    {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_str()
    {min_s = 1000;
     for(int i = 0; i < n; i++)
      {sum = 0;
      for(int j = 0; j < m; j++)
       sum+=*(x + i*m + j);
       if (sum < min_s) 
        {min_s = sum; stroka++;}
      printf("Minimalnaya summa= %3.2f v stroke %d ",min_s, stroka); printf("\n");    
      }
    }
//==================//
  massiv matrica:: operator<<( /*const */matrica & p1)
	{massiv rez;/*rezyltiryjywijj massiv*/
	 printf("Rabotaet <<\n");
	   if (p1.min_s < min_s) 
         {for(int j = 0; j < p1.m; j++ )
           *(rez.a+j)=  *(p1.x +  p1.stroka* p1.m  + j );
         }
        else
	/*if (min_s<p1.min_s)*/
         {for(int j = 0; j < m; j++ )
           *(rez.a+j)=  *(x + stroka * m  + j );
         }
       return rez;
    }
/*--------------------------------*/
  void matrica::sum_el()
    {kol_str=0;
     for(int i=0;i<n;i++)
      {sum2=0;
       for(int j=0;j<m;j++)
        sum2+=*(x+i*m+j);
        stroka=i+1; kol_str++;
      }     
    } 
/*--------------------------------*/ 
  void matrica::vivod_sum_el()
    {/*printf("\nsumma= %3.2f v stroke %d ",sum2, stroka); }printf("\n");
     printf("koli4estvo strok novoj matrici = %d",kol_str);printf("\n");*/
    cout<<"\nsumma="<<sum2<<"v stroke"<<stroka<<"\n";
    cout<<"\nkoli4estvo strok novoj matrici ="<<kol_str<<"\n";
    }
/*--------------------------------*/   
  matrica matrica::operator-(massiv &p)
    {matrica r;
     printf("Rabotaet minus\n");
     r.x=new float [kol_str*m];/*Videlim pamjat' dlja rezyltiryjywej  matrici*/
     if (sum2<p.sum1)        
       {for (int i=0; i<kol_str; i++)  
        for(int j=0;j<m;j++)          
         r.x=(x+i*m+j);
       }
     return r;
    }
/*-----------------------------*/
int main()
{
massiv  V;

matrica M1;
M1.vvod();
M1.vivod();

matrica M2;
M2.vvod();
M2.vivod();
M2.sum_el();
M2.vivod_sum_el();
M2.min_str();

V=M1<<M2;
V.vivod();
system("pause");

matrica M3;
M3=M2-V;
M3.vivod();
return 0;
}
Вроде бы разобралась что к чему - а тут эта ошибка:
In function `int main()':
173 D:\...\!!.cpp no match for 'operator=' in 'V = matrica:perator<<(matrica&)(((mat rica&)(&M2)))'
note D:\...\!!.cpp:48 candidates are: massiv& massiv:perator=(massiv&)

подсказка говорит что нужна перегрузка оператора = или как??? уже ничего не понимаю..как сделать програмку рабочей??
lisica198808 вне форума Ответить с цитированием
Старый 11.06.2014, 01:58   #2
Carbon
JAVA BEAN
Участник клуба
 
Аватар для Carbon
 
Регистрация: 22.04.2007
Сообщений: 1,329
По умолчанию

Я думаю, нужно:
massiv& massiv:: operator=(const massiv& );
Carbon вне форума Ответить с цитированием
Старый 12.06.2014, 23:46   #3
lisica198808
Пользователь
 
Регистрация: 06.11.2012
Сообщений: 64
По умолчанию

Куда это нужно? в класс матрицы добавить или в классе массив исправить??Я правда не понимаю уже как сделать и куда писать код чтоб нормально работало все(((

как правильно поставить перегрузку оператора присваивания после перегрузки оператора << ?
Может компилятор ругаться изза того что и оператор= в выражении V=M1<<M2 должен тоже перегружаться?

Последний раз редактировалось Stilet; 13.06.2014 в 08:04.
lisica198808 вне форума Ответить с цитированием
Старый 13.06.2014, 06:25   #4
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Там, где у тебя написано
Код:
	         massiv& massiv:: operator=(massiv& /*ob*/);
, нужно написать
Код:
	         massiv& massiv:: operator=(const massiv& /*ob*/);
И там, где определение идет
Код:
massiv& massiv::operator=(massiv& P2)
- тоже заменить на
Код:
massiv& massiv::operator=(const massiv& P2)
Son Of Pain вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Модуль Match Garilla Помощь студентам 10 24.03.2014 17:10
operator char*() + operator[](uint) riden Общие вопросы C/C++ 3 17.02.2013 08:45
C++ Builder Перегрузка оператора = с ошибкой Could not find a match for 'operator Vector2D::=(const Vector2D)' kolobuch Помощь студентам 0 16.04.2012 22:39
ошибка: no match for ‘operator<<’ in ‘std::operator<< [with _Traits = std::char_traits<char> Critter Общие вопросы C/C++ 5 08.08.2010 23:38