调用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;
}