我嘗試操作符重載,爲此,我下面的代碼寫包括常量給出錯誤(C++)
class OwnClass
{
private:
int x,y;
public:
OwnClass(int x, int y) { SetX(x); SetY(y); }
int GetX() { return x; }
void SetX(int x) { this->x = x;}
int GetY() { return y; }
void SetY(int y) {this->y = y;}
OwnClass& operator + (const OwnClass &o) // Problematic line
{
this->x += o.GetX();
this->y += o.GetY();
return *this;
}
};
在編譯時,下面的錯誤顯示
樂趣的.cpp(65):錯誤C2662: 'OwnClass ::的getX':不能 '這個' 從 '常量OwnClass' 指針轉換爲 'OwnClass &' 轉化失去限定符
fun.cpp(66):錯誤C2662: 'OwnClass ::傑蒂':不能轉換 從 'const的OwnClass' 到 'OwnClass &' 轉換 '這個' 指針失去 限定符
當我修改代碼作爲下,它編譯好。
OwnClass& operator + (OwnClass &o) // removed const
{
this->x += o.GetX();
this->y += o.GetY();
return *this;
}
我看不懂爲什麼這麼說?我的意思是我無法理解編譯器錯誤。
'operator +'應該返回一個新的對象,而不是同一個對象。它是'operator + ='應該返回當前對象(通過引用)。 – PaulMcKenzie
@PaulMcKenzie感謝您的額外信息! – SimpleGuy