Я встречаю сообщение об ошибке, не соответствующее преобразованию для функционального стиля, отлитого от '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;
редактировать
Вы объявляете свой конструктор следующим образом: 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;
}
const
в вашем определении, но не ваше заявление.TrashCan
используяoperator +
? Это может быть источником ошибки. Кроме того, если вы сможете добавить, какие конструкторы есть в классеTrashCan
, это очень поможет. Или на самом деле, вся декларацияTrashCan
, если она не слишком длинная.