C++运算符重载错误

C++ Operator Overloading Error

本文关键字:错误 重载 运算符 C++      更新时间:2023-10-16

我遇到读取错误,函数样式从"int"转换为"垃圾桶"没有匹配的转换。

这是标头中的声明:

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;

Edit

你像这样声明你的构造函数: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;
}