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

0

Я встречаю сообщение об ошибке, не соответствующее преобразованию для функционального стиля, отлитого от 'int' до 'TrashCan'.

вот объявление в заголовке:

class TrashCan
{
friend TrashCan operator +( TrashCan& left,
                          TrashCan& right);
public:
TrashCan();
int size=0;
int item=0;

void setSize(int);
void addItem();

вот моя реализация:

TrashCan operator +(const TrashCan& left,
              const TrashCan& right) {
TrashCan t= TrashCan( left.size + right.size );
return( t );

}

вот главная с оператором внизу:

int main( ) {

cout << "Welcome to My TrashCan Program!" << endl;

TrashCan myCan;
TrashCan yourCan;

yourCan.setSize( 12 );
myCan.setSize( 12 );

yourCan.addItem( );
yourCan.addItem( );
myCan.addItem( );

myCan.printCan();
yourCan.printCan();

//TrashCan combined = yourCan + myCan;
  • 3
    У вас есть const в вашем определении, но не ваше заявление.
  • 0
    Не могли бы вы включить код, в котором вы пытаетесь оперировать двумя объектами TrashCan используя operator + ? Это может быть источником ошибки. Кроме того, если вы сможете добавить, какие конструкторы есть в классе TrashCan , это очень поможет. Или на самом деле, вся декларация TrashCan , если она не слишком длинная.
Показать ещё 1 комментарий
Теги:
class
operator-overloading

1 ответ

3

редактировать

Вы объявляете свой конструктор следующим образом: TrashCan();

Но вы называете это следующим образом: TrashCan t= TrashCan( left.size + right.size ); ,

У вас должен быть второй конструктор, такой как TrashCan(int nsize): size(nsize) { }.

godel9 уже поставил ответ в комментариях, но вот пример рабочего кода:

#include <iostream>

class TrashCan {
    // Your declaration did not match your definition
    // Need to put const here
    friend TrashCan operator +(const TrashCan& left,
                          const TrashCan& right);
    public:
        TrashCan(int nsize) : size(nsize) { }
        ~TrashCan() { }
        int size;                      
};

TrashCan operator +(const TrashCan& left,
              const TrashCan& right) 
{
    TrashCan t= TrashCan( left.size + right.size );
    return( t );
}

int main()
{
    TrashCan tc1(10);
    TrashCan tc2(20);

    std::cout << (tc1 + tc2).size;
    // outputs 30
    return 0;
}
  • 0
    @aschepler Ах, спасибо за указание на это. Я не пристально посмотрел на редактирование OP.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню