私はベクトル関数を持つベクトルクラスを作成しようとしているプロジェクトです。 + =加算代入をオーバーライドしてベクトル加算関数を追加しようとしています。私は+ =関数で値を変更する必要はないので、その値をconst reference
として渡したいと思います。C++のオーバーライド+ = const参照と
マイコード:
Vector2D.h
#pragma once
class Vector2D
{
private:
int m_x, m_y;
public:
Vector2D(int x, int y);
int getX();
int getY();
void setX(int x);
void setY(int y);
Vector2D& operator+=(const Vector2D&);
};
Vector2D.cpp
#include "Vector2D.h"
Vector2D::Vector2D(int x, int y)
{
m_x = x;
m_y = y;
}
int Vector2D::getX()
{
return m_x;
}
int Vector2D::getY()
{
return m_y;
}
void Vector2D::setX(int x)
{
m_x = x;
}
void Vector2D::setY(int y)
{
m_y = y;
}
Vector2D& Vector2D::operator+=(const Vector2D& toAdd)
{
m_x += toAdd.getX();
m_y += toAdd.getY();
return *this;
}
しかし、私はエラーを取得:
を':変換できない 'この' ポインタオブジェクトがメンバ 機能 "Vector2D ::のgetX"
と
Vector2D ::のgetX(ボイド)がINTと互換性のない修飾子型を持ちます'CONST Vector2D' から 'Vector2D &' に
Iは、const
にxとyを返す関数を連鎖試み:
const int Vector2D::getX()
const int Vector2D::getY()
しかし、これはエラーを解決しません。パラメータからconst
を削除すると、すべてのエラーが解決され、作業コードが生成されます。
+ =演算子に渡される値を変更できないようにコードを変更するにはどうすればよいですか(たとえば、渡されたオブジェクトでsetY(100)を呼び出すなど)。
私は "私はconstにxとyを返す関数を書き換えようとしました:" –
@SvenB、あなたは関数を変更せず、戻り値を変更しました。 'const'キーワードの配置は重要です。 – StoryTeller
私は問題の完全な説明をしていないと思います。私の目標は、変更できないオブジェクトを渡すことです(例えば、setX(200)を呼び出すなど)、答えが間違っていた –