我试图编写一些代码来创建一个带有私有小时和分钟的类。现在我试图从整数减去另一个类创建一个新类。
class Foo
{
Public:
Foo(int u, int m);
Foo(int m);
int operator-(const Foo& other);
friend Foo operator-(int lhs, const Foo& rhs);
Private:
int minute, hour;
};
Foo::Foo(int u, int m): hour(u), minute(m){}
Foo::Foo(int m): hour(0), minute(m){}
int Foo::operator-(const Foo& other)
{
int x;
x = (60*(uur-other.uur));
x += (min - other.min);
return x;
}
main()
{
Foo t1(2,10);
const Foo kw(15);
Foo t2(t1 -kw);
Foo t3(2,10);
Foo t4(132 -t3);
}
现在我不能让T4只包含2分钟(132 - ((60 * 2)-10)) 有谁知道如何解决这个问题? 我收到错误: 错误:不匹配'运营商 - ' (操作数类型是' int'和' Foo')
void operator-(int x, const Foo& other);
当我包含此功能时,我收到错误 错误:' void Foo :: operator-(int,const Foo&)'必须采取零或一个参数。 使用以下代码:
Foo operator-(int lhs, const Foo& rhs)
{
int y;
y = lhs - rhs.min;
y -= (60 * rhs.uur);
return y;
}
答案 0 :(得分:2)
正如错误消息所示,您需要一个operator-
,其左侧参数为int
,右侧参数为Foo
。这不是一个成员函数,因为成员函数总是将自己的类型作为第一个参数。所以你必须使它成为一个自由函数:
Foo operator-(int, const Foo&) { ... }