1

Тема: no match for 'operator++' (operand type is 'person')

От так, знов майже ті ж граблі! Як тільки пишу код з голови, виникають помилки, вчора двадцятихвилинне розглядання коду тай й не привело до прояснення..

no match for 'operator++' (operand type is 'person')|

#include<stdio.h>
#include<string.h>


class person
{
    private:
     int count;
    public:
     void operator++ (int)
     {
         count++;
     }
     friend void operator++ (person &p, int);
     person (int _count = 0) :  count(_count)  {} ;
     int day()
     {
         return count;
     }
};

  void operator++ (person &p, int )//int символізує постфіксну форму
     {
         ++p.count;
     }




int main()
{
  person John(24);
  ++John;
  printf ("Trymaj %d\n", John.day());
  John++;
  printf ("Trymaj %d\n", John.day());
return 0;
}

2

Re: no match for 'operator++' (operand type is 'person')

Ну вам же детально розжували, що префіксний ++p - це operator++(), а постфіксний p++ - це operator++(int), а ви знов на ті ж самі граблі.

Подякували: leofun011

3

Re: no match for 'operator++' (operand type is 'person')

Зараз піду перечітаю, справді, звиняйте.

4 Востаннє редагувалося М18х00 (24.12.2017 22:07:19)

Re: no match for 'operator++' (operand type is 'person')

Ні, я все одно не розумію чому така, саме така помилка, тобто no match for 'operator++' (operand type is 'person')
ткніть пальцем в конкретну змінну, розтулмачьте ще більш докладно.

Я звісно трохи що справив, але власне суті помилки ці виправлення не торкаються.

#include<stdio.h>
#include<string.h>


class person
{
    private:
     int count;
    public:
     person operator++ (int)
     {
         count++;
         return this;
     }
     friend person operator++ (person &p, int);
     person (int _count = 0) :  count(_count)  {} ;
     int day()
     {
         return count;
     }
};

   person operator++ (person &p, int )//int символізує постфіксну форму і повертає значення до інкременту 
     {
         person tmp;
         tmp.count = p.count;
         ++p.count;
         return tmp;
     }




int main()
{
  person John(24);
  ++John;
  printf ("Trymaj %d\n", John.day());
  John++;
  printf ("Trymaj %d\n", John.day());
return 0;
}


Тю господи.. А що це в мене за рядок??

person operator++ (int)

5

Re: no match for 'operator++' (operand type is 'person')

Ну все, ото  воно.. Там помилка й була! Я ж дививсь і переписував інший опетатор..  Аж смішно!