整数减去一个班级

时间:2017-05-15 16:55:15

标签: c++ oop

我试图编写一些代码来创建一个带有私有小时和分钟的类。现在我试图从整数减去另一个类创建一个新类。

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

1 个答案:

答案 0 :(得分:2)

正如错误消息所示,您需要一个operator-,其左侧参数为int,右侧参数为Foo。这不是一个成员函数,因为成员函数总是将自己的类型作为第一个参数。所以你必须使它成为一个自由函数:

Foo operator-(int, const Foo&) { ... }