@Durilka96

Как исправить ошибку унарного оператора?

подскажите что ошибка означает и как исправить? [bcc32c Error] File1.cpp(152): invalid argument type 'DinMass' to unary expression
#include <cstdlib>
#include <conio.h>
#include <cstdio>
using namespace std;

class DinMass {
  int size, *mas;

public:
  void info(); // Информация об авторе

  DinMass(int p_size = 0, int N = 0) { // Конструктор
    if (p_size) {
      size = p_size;
      mas = new int[size];
      if (N) {

        for (int i = 0; i < size; i++) {
          mas[i] = random(N) - random(N);
        }
      }
      else {
        for (int i = 0; i < size; i++) {
          mas[i] = 0;
        }
      }
    }
    else {
      mas = NULL;
      size = 0;
    }
  }
  void Show(); // Вывод массива
  int *GetMass ();
  //--------------------------------------
  int *operator - (DinMass &);
  int GetSize();
  DinMass& operator = (const DinMass & m) {
    if (&m != this) {
      if (mas) {
        delete[]mas;
      }
      if (m.mas) {
        size = m.size;
        mas = new int [size];
        for (int i = 0; i < size; i++) {
          mas[i] = m.mas[i];
        }
      }
    }
    return *this;
  }
  friend int operator > (DinMass &, DinMass &);

  ~DinMass() { // Деструктор

  }
};

int *DinMass::GetMass () {
return mas;
}



int DinMass::GetSize() {
  return size;
}

int operator > (DinMass &m, DinMass &m1) {
  int *p1 = m.GetMass();
  int *p2 = m1.GetMass();
  int sum1 = 0, sum2 = 0;
  for (int i = 0; i < m.GetSize(); i++) {
  sum1 += p1[i];
  }
  for (int i = 0; i < m1.GetSize(); i++) {
  sum2 += p2[i];
  }
  if (sum1 > sum2) {
  return 1;
  }
  else {
  return 0;}
}

void DinMass::info() {
  printf("Выполнил\n");
  // Информация об авторе
}


//-------------------------------------------------
int *DinMass::operator - (DinMass& m) {
   int *p = m.GetMass();
   int *arr = new int [m.size];
   for (int i = 0; i < m.size; i++) {
   if (p[i] > 0) {
   arr [i] = p[i]*(-1);
   }
   else {
     arr [i] = p[i];
   }
   }

   return arr;
}


void DinMass::Show() {
  for (int i = 0; i < size; i++) {
    printf("%i ", mas[i]);
  }
  printf("\n");
}

double* operator / (DinMass& m1, DinMass &m2) {
int size = 0;
int *p1 = m1.GetMass();
int *p2 = m2.GetMass();
if (m1.GetSize()  < m2.GetSize()) {
size = m1.GetSize();
}
else {
  size = m2.GetSize();
}
double *array = new double [size];
for (int i = 0; i < size; i++) {
array [i] = (double)p2[i]/(double)p1[i];
}
return array;
}

int main() {
  system("chcp 1251");
  randomize();
  printf("Введите кол-во элементов массива k, диапозон значений x\n");
  int k = 10;
  int x = 100;
//  printf("k=");
//  scanf("%i", &k);
//  printf("x=");
//  scanf("%i", &x);
  system("cls");
  DinMass m1(10, 100), m2(k, x), m3(5, 0);
  m1.info();
  m1.Show();
  m2.Show();
  m3.Show();

  int *p = -m1;

   if (m1 > m2) {
    printf("\nCумма элементов 1-го массива больше чем 2-го\n" );
   }
   else {
     printf("\nСумма элементов 1-го массива меньше чем 2-го\n");
   }

   printf("\nВывод глобальной функции\n");
   printf ("Поэлиментное деление элементов массива: ");
   double *q = m1/m2;
   for (int i = 0; i < 10; i++) {
   printf ("\n%.02f",q [i]);
   }


  printf("\n");

  system("pause");
}

нужно вывести объект m1 с оператором -, который все числа массива делает отрицательными
  • Вопрос задан
  • 102 просмотра
Пригласить эксперта
Ответы на вопрос 1
@romancelover
программист C++ под Linux
В С++ унарный оператор X определяется либо как operatorX без параметров внутри класса, или как функция operatorX с одним параметром вне класса. Перенесите operator- вовне класса, и добавьте friend, аналогично тому, как это сделано для operator>.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы