С вашей Addition
функции является членом Vector
, вы должны назвать его как таковой:
c = Vector::Addition(a, b);
или
c = a.Addition(b);
Обратите внимание, что первый из них требует функцию Addition
быть статическим, что означает, что он не работает в конкретном примере (this
в корпусе функции):
static Vector Addition(Vector a, Vector b);
Но тогда вы не можете получить доступ к this
указатель, так что у вас есть по умолчанию, построить temp
вместо того, чтобы брать копию (которая, кстати, не используется, так как вы перезаписать x
и y
в любом случае).
Второй использует левый операнд в качестве указателя this
в вашей реализации (нет a
в подписи).
Vector Addition(Vector b)
{
Vector temp = *this;
temp.x += b.x;
temp.y += b.y;
return temp;
}
Обратите внимание, что вы также можете операторы перегрузки в C++. Для этого определяют функцию нестатический члена под названием operator+
, который принимает второй экземпляр (первый экземпляр является this
указателя в функции которого будет левая часть операнда):
Vector operator+(const Vector &other) const;
Реализация (одна возможность):
Vector Vector::operator+(const Vector &other)
{
Vector temp = *this;
temp.x += other.x;
temp.y += other.y;
return temp;
}
Если вы хотите использовать 'Addition' таким образом она должна быть свободной функцией, а не метод. –
За исключением этого '* this' не будет работать. Я не уверен, что это предлагает над 'return {a.x + b.x, a.y + b.y};', хотя, с соответствующим конструктором. – chris