Для проекта я пытаюсь создать векторный класс с векторной функцией. Я пытаюсь добавить функцию добавления векторов, переопределяя присваивание + =. Поскольку я не хочу, чтобы функция + = меняла значение для добавления, я хочу передать это значение как const reference
.C++ override + = with const reference
Мой код:
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"
и
INT Vector2D :: GetX (аннулируются) ': не удается преобразовать 'это' указатель от «сопзЬ Vector2D» к «Vector2D &»
Я попытался цепочки функций, которые возвращают х и у в const
:
const int Vector2D::getX()
const int Vector2D::getY()
но это не решит ошибку. Удалите const
из параметра, который разрешает все ошибки и приводит к рабочему коду.
Как изменить код, чтобы убедиться, что значение, переданное оператору + =, нельзя изменить (например, вызвав setY (100) на переданный объект)?
Я попробовал это, увидев «Я попытался перестроить функции, возвращающие x и y в const:» –
@SvenB, вы не изменили функции, вы изменили их возвращаемое значение. Размещение ключевого слова 'const' имеет значение. – StoryTeller
Я думаю, что я не дал полного объяснения проблемы. Моя цель - передать объект, который не может быть изменен (например, call setX (200)). Или я неправильно передал ваш ответ. –