Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/128.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;运算符重载错误_C++_Class_Operator Overloading - Fatal编程技术网

C++ C++;运算符重载错误

C++ C++;运算符重载错误,c++,class,operator-overloading,C++,Class,Operator Overloading,我在读取时遇到一个错误,没有将函数样式从“int”转换为“TrashCan”的匹配转换 以下是标题中的声明: class TrashCan { friend TrashCan operator +( TrashCan& left, TrashCan& right); public: TrashCan(); int size=0; int item=0; void setSize(int); void addItem(); 以

我在读取时遇到一个错误,没有将函数样式从“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;
int main(){
无法编辑

您可以这样声明构造函数:
TrashCan();

但您可以这样称呼它:
TrashCan t=TrashCan(left.size+right.size);

您需要有第二个构造函数,如
TrashCan(intnsize):size(nsize){}

godel9已经在注释中给出了答案,但下面是一个工作代码示例:

#包括
垃圾桶{
//您的声明与您的定义不匹配
//需要把const放在这里
朋友垃圾桶操作员+(常量垃圾桶和左侧,
康斯特垃圾桶(右);
公众:
垃圾桶(int nsize):大小(nsize){}
~TrashCan(){}
整数大小;
};
垃圾桶操作员+(常量垃圾桶和左侧,
康斯特垃圾桶(右)
{
垃圾桶t=垃圾桶(left.size+right.size);
返回(t);
}
int main()
{
垃圾桶tc1(10);
垃圾桶tc2(20);
std::cout编辑

您可以这样声明构造函数:
TrashCan();

但您可以这样称呼它:
TrashCan t=TrashCan(left.size+right.size);

您需要有第二个构造函数,如
TrashCan(intnsize):size(nsize){}

godel9已经在注释中给出了答案,但下面是一个工作代码示例:

#包括
垃圾桶{
//您的声明与您的定义不匹配
//需要把const放在这里
朋友垃圾桶操作员+(常量垃圾桶和左侧,
康斯特垃圾桶(右);
公众:
垃圾桶(int nsize):大小(nsize){}
~TrashCan(){}
整数大小;
};
垃圾桶操作员+(常量垃圾桶和左侧,
康斯特垃圾桶(右)
{
垃圾桶t=垃圾桶(left.size+right.size);
返回(t);
}
int main()
{
垃圾桶tc1(10);
垃圾桶tc2(20);
std::cout编辑

您可以这样声明构造函数:
TrashCan();

但您可以这样称呼它:
TrashCan t=TrashCan(left.size+right.size);

您需要有第二个构造函数,如
TrashCan(intnsize):size(nsize){}

godel9已经在注释中给出了答案,但下面是一个工作代码示例:

#包括
垃圾桶{
//您的声明与您的定义不匹配
//需要把const放在这里
朋友垃圾桶操作员+(常量垃圾桶和左侧,
康斯特垃圾桶(右);
公众:
垃圾桶(int nsize):大小(nsize){}
~TrashCan(){}
整数大小;
};
垃圾桶操作员+(常量垃圾桶和左侧,
康斯特垃圾桶(右)
{
垃圾桶t=垃圾桶(left.size+right.size);
返回(t);
}
int main()
{
垃圾桶tc1(10);
垃圾桶tc2(20);
std::cout编辑

您可以这样声明构造函数:
TrashCan();

但您可以这样称呼它:
TrashCan t=TrashCan(left.size+right.size);

您需要有第二个构造函数,如
TrashCan(intnsize):size(nsize){}

godel9已经在注释中给出了答案,但下面是一个工作代码示例:

#包括
垃圾桶{
//您的声明与您的定义不匹配
//需要把const放在这里
朋友垃圾桶操作员+(常量垃圾桶和左侧,
康斯特垃圾桶(右);
公众:
垃圾桶(int nsize):大小(nsize){}
~TrashCan(){}
整数大小;
};
垃圾桶操作员+(常量垃圾桶和左侧,
康斯特垃圾桶(右)
{
垃圾桶t=垃圾桶(left.size+right.size);
返回(t);
}
int main()
{
垃圾桶tc1(10);
垃圾桶tc2(20);

std::您的定义中是否包含
const
,而不是您的声明。您是否可以包含您尝试使用
operator+
对两个
TrashCan
对象进行操作的代码?这可能是错误的根源。此外,如果您可以添加
TrashCan
类的构造函数,这将是一个很大的帮助。或者,如果
垃圾桶
的整个声明不太长的话,也可以这样说。@NicholasM我在编辑中包含了更多的代码,因为这是一个非常简单的程序。您的定义中包含了
常量
,但您的声明中没有。您可以在尝试使用
运算符对两个
垃圾桶
对象进行操作时包含这些代码吗+?这可能是错误的根源。此外,如果您可以添加
TrashCan
类所具有的构造函数,这将是一个很大的帮助。或者说,如果
TrashCan
的整个声明不太长的话。@NicholasM我在编辑中包含了更多的代码,因为它是一个非常简单的程序。您的def中有
const
初始化,但不是您的声明。您是否可以包含使用
operator+
对两个
TrashCan
对象进行操作的代码?这可能是错误的根源。此外,如果您可以添加
TrashCan
类所具有的构造函数,这将是一个很大的帮助。或者实际上,
Tra的整个声明shCan
,如果不太长的话。@NicholasM我在编辑中包含了更多的代码,因为这是一个非常简单的程序。您的定义中包含了
常量,但声明中没有。您是否可以包含尝试使用
运算符+
对两个
垃圾桶
对象进行操作的代码?这可能是错误的根源。此外,如果您可以添加
TrashCan
类所具有的构造函数,这将是一个很大的帮助