调用std::负can';过载后不能工作-运算符 < >我为我的C++代码的以下代码段获得编译错误。

调用std::负can';过载后不能工作-运算符 < >我为我的C++代码的以下代码段获得编译错误。,c++,std,C++,Std,struct Power{ int power; int age; int operator-(const Power& p1) { return this->power - p1.power; } }; int main() { Power p1; p1.power = 1; p1.age = 25; Power p2; p2.power = 2; p2.age = 26; std::cout<<std::

struct Power{
  int power;
  int age;
  int operator-(const Power& p1)
  {
     return this->power - p1.power;
  }
};


int main() {
  Power p1;
  p1.power = 1;
  p1.age = 25;
  Power p2;
  p2.power = 2;
  p2.age = 26;
  std::cout<<std::minus<Power>()(p1, p2)<<std::endl;
}
struct Power{
整数幂;
智力年龄;
int运算符-(恒功率和p1)
{
返回此->电源-p1.power;
}
};
int main(){
功率p1;
p1.功率=1;
p1.年龄=25岁;
功率p2;
p2.功率=2;
p2.年龄=26岁;

std::cout定义输入和输出的类型;它不处理类型切换AFAICT。您的
操作符-
获取
功率
,并返回
int
,但
std::减号必须获取并返回
功率
。投诉是因为
std::减号
返回
功率
,以及
ostream
运算符没有重载,而
std::MENUS
只能执行
t运算符-(常量t&lhs,常量t&rhs)
,您的运算符没有相同的限制。在类外声明运算符:

int operator-(const Power &lhs, const Power &rhs) {
    return lhs.power - rhs.power;
}

现在可以做代码< > STD::CUT,使它听起来像是在重载操作符之前工作的。直接输出<代码> p1-p2< /Cord>也不起作用。这与<代码> STD::减去< /代码>无关。我确信P1-P2与C++ 11OH一起工作,这是我的坏。我没有看到它返回<代码> int >代码>而不是<代码> POWER <代码>通常是的。谢谢。我把它改成std后::cout@WubinOuyang:“不工作”不是特别有用;更改后它如何失败?/usr/include/c++/5/bits/stl_函数。h:182:20:错误:与“运算符-”不匹配(操作数类型为“const Power”和“const Power”){return\uu x-\uu y;}@WubinOuyang:您没有使

运算符-
常量
std::减号
接受其参数为
常量
,并将其作为常量使用。当
运算符-
是未声明为
常量
的成员函数时,它假定可能会修改左侧操作数(
),因此它不能与
常量
左手操作数一起使用。或者使
运算符-
常量
,或者更准确地说,使其成为非成员函数,per.@WubinOuyang:…有朝一日,您将不得不处理
int
不能变为
的问题,以便
减号
返回。C++14有,如果你可以使用的话…OP明确地想要使用
std::减号
。说“不要使用
std::减号
”有点离题。除此之外,非成员函数对于
运算符-
更正确(因为它是非变异的),如果成员函数遵循所需的模式,
std::减号
应该可以与成员函数配合使用(函数为
const
,参数为
const
引用,引用类型与定义它的类相同,结果为非
const
值,类型相同).@ShadowRanger是的,但是这里的
操作员-
没有返回
电源,是吗?因此
std::减号
对于此用法无效。
int operator-(const Power &lhs, const Power &rhs) {
    return lhs.power - rhs.power;
}