Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 作为非静态成员变量的默认参数_C++ - Fatal编程技术网

C++ 作为非静态成员变量的默认参数

C++ 作为非静态成员变量的默认参数,c++,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;

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

代码如下:

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_;
    ^
这表明成员变量必须是静态的,才能在函数中将其用作默认参数。但我不希望它们是静态的


解决方案是什么?

过载

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

与两个数字求和的原始问题相比,您试图解决的实际问题更有可能从重构中获益。此行为显然与您希望通过默认参数实现的行为完全相同。

一种解决方法是将
函数重载为:

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

是的,它们必须是静态的,我会在其他版本中调用
Bar(int,int)
来分解代码(我的意思是
intbar(){returnbar(x,y)}
),我会在其他版本中调用
Bar(int,int)
来分解代码(我的意思是
intbar(){returnbar(x,y)}
)@Jarod42很好。我认为你的表达方式更优雅。