我正在完成一些家庭作业,并且遇到如何形成我的方法签名以重载类成员的问题。
我的头文件
class MyInt
{
int internalInt;
public:
MyInt::MyInt(int i);
const MyInt operator+(const MyInt& mi);
const MyInt& operator++();
};
我的代码文件
MyInt::MyInt(int i)
{
internalInt = i;
}
const MyInt MyInt::operator+(const MyInt& mi)
{
cout << "Inside the operator+\n";
mi.print(cout);
return MyInt(internalInt + mi.internalInt);
}
const MyInt& MyInt::operator++()
{
cout << "Inside the operator++\n";
internalInt++;
return this; //Line 42
}
当我尝试编译代码时,我收到的错误是
ex4.cpp:42: error: invalid initialization of reference of type ‘const MyInt&’
from expression of type ‘MyInt* const’
我在理解如何使其工作并尝试了一些方法签名时遇到了问题。在我的教科书中,他们正在填补所有重载,但我希望弄清楚我做错了什么,而不是仅仅使用流来获取我的代码进行编译。
谢谢!
答案 0 :(得分:8)
尝试:
const MyInt& MyInt::operator++()
{
cout << "Inside the operator++\n";
internalInt++;
return *this;
}
您正在返回此指针,而不是引用,您需要取消引用它。
答案 1 :(得分:2)
首先,在operator++()
中,写下return *this;
而不是return this;
。同时删除const!
-
const MyInt operator+(const MyInt& mi);
其次,将其设为const-function,如
const MyInt MyInt::operator+(const MyInt& mi) const // <--- note this!
这是const-function。没有它,你将无法添加MyInt的const对象。
在最右边写const
之后,你可以这样写:
const MyInt m1(10);
MyInt m2(20);
MyInt m3 = m1 + m2 ; //m1 is const, so it can call ONLY const-function