如何在C+中重载一元和二元减号运算符+;? 在C++中,对于一元和二元减算子,操作符重载函数是如何区分的?< /P>

如何在C+中重载一元和二元减号运算符+;? 在C++中,对于一元和二元减算子,操作符重载函数是如何区分的?< /P>,c++,operator-overloading,C++,Operator Overloading,我正在尝试使用以下代码重载这两个: Vector Vector::operator-(){ return Vector(-x,-y,-z); } Vector Vector::operator-(const Vector& v){ return this* + (-v); } 但这会带来很多错误: vector.cpp: In member function ‘Vector Vector::operator-(const Vector&)’: vector.cpp:8

我正在尝试使用以下代码重载这两个:

Vector Vector::operator-(){
  return Vector(-x,-y,-z);
}

Vector Vector::operator-(const Vector& v){
  return this* + (-v);
}
但这会带来很多错误:

vector.cpp: In member function ‘Vector Vector::operator-(const Vector&)’:
vector.cpp:88:20: error: passing ‘const Vector’ as ‘this’ argument of ‘Vector Vector::operator-()’ discards qualifiers [-fpermissive]
   return this* + (-v);
                    ^
vector.cpp:88:16: error: no match for ‘operator+’ (operand type is ‘Vector’)
   return this* + (-v);
                ^
vector.cpp:88:16: note: candidates are:
vector.cpp:70:8: note: Vector Vector::operator+(const Vector&)
 Vector Vector::operator+(const Vector& v){
        ^
...

如何解决此问题?

1。
v
通过引用传递给const,不能使用非const成员函数调用它。由于
运算符-
运算符+
(一元和二元版本)不会修改类的成员,所以应该使它们成为常量成员函数

Vector Vector::operator-() const {
  return Vector(-x,-y,-z);
}
2.改变

return this* + (-v);


作为自由函数而不是成员函数实现。或者(如果您坚持将其实现为成员函数)将其标记为
const
成员函数,即
Vector Vector::operator-(const Vector&)const和向量向量::运算符-()常量`@这只是一个语法错误<代码>此*+(-v)
将在
v
上调用一元
运算符-
,并在返回值上调用一元
运算符+
,然后失败,因为您只定义了一个二进制
运算符+
*此+(-v)
将在
v
上调用一元
运算符-
,而
*此
将取消对
的引用,然后用它们调用二进制
运算符+
return *this + (-v);