C++运算符重载错误
C++ Operator Overloading Error
我遇到读取错误,函数样式从"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;
}
相关文章:
- 错误 没有与参数列表匹配的重载函数"getline"实例
- 在运算符重载定义中使用成员函数(const错误)
- 重载方法的方式会在使用临时调用时生成编译器错误
- 数组索引重载错误
- C++:需要帮助了解运算符重载错误
- 在类Bat代码中,这给了我错误:重载的"Bat()"的调用是不明确的Bat(;)
- 不明确的错误重载运算符<<QdataStream 子类和个人类
- 具有相同参数的不同模板模板参数的错误重载函数
- 编译错误:重载函数的多个实例与 arument 列表匹配
- clang-libc++错误:重载解析选择了隐式删除的复制赋值运算符
- 错误:重载的调用不明确
- C++ 编译器选择输出流运算符<<的错误重载
- 分段错误重载运算符<<
- 错误:重载函数的多个实例与参数列表匹配
- 错误:重载的“max(int, int)”的调用不明确
- C++编译器选择类成员函数的错误重载
- 编译错误:重载操作符()
- 错误:重载的“bind(int(Class::*)(int,int),Class*,int,int”的调用不明确
- 未解析的外部符号错误重载操作符+模板
- 错误重载在构建"OpenSubdiv"时具有类似的转换