默认参数为非静态成员变量

时间:2015-09-04 13:47:15

标签: c++

我想创建一个具有两个整数成员变量的类,以及一个具有两个可选参数的函数。如果提供了这些参数,则函数返回它们的总和;如果未提供这些参数,则该函数返回其两个成员变量的总和。

以下是代码:

class Foo
{
private:
    int x_;
    int y_;
public:
    Foo(int x, int y) : x_(x), y_(y){}
    int Bar(int a = x_, int b = y_)
    {
        int z = a + b;
        return z;
    }
};

但是,我收到以下编译错误:

invalid use of non-static data member 'Foo::x_'
int x_;
    ^
invalid use of non-static data member 'Foo::y_'
int y_;
    ^

这表明成员变量必须是静态的,才能将它们用作函数中的默认参数。但我不希望它们是静止的......

解决方案是什么?

2 个答案:

答案 0 :(得分:8)

重载Bar

int Bar()
{
    return x_ + y_;
}

int Bar(int x)
{
    return x + y_;
}

int Bar(int x, int y)
{
    return x + y;
}

感谢@ Jarod42的改进:

int Bar(int a, int b)
{
    return a + b;
}

int Bar(int a)
{
    return Bar(a, y_);
}

int Bar()
{
    return Bar(x_, y_);
}

您尝试解决的现实世界问题更有可能从这种重构中受益,而不是原始的两个数字相加的问题。这种行为更明显地与您希望通过默认参数实现的行为相同。

答案 1 :(得分:5)

解决方法是将npm install protractor-html-screenshot-reporter --save-dev函数重载为:

Bar