我想创建一个具有两个整数成员变量的类,以及一个具有两个可选参数的函数。如果提供了这些参数,则函数返回它们的总和;如果未提供这些参数,则该函数返回其两个成员变量的总和。
以下是代码:
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_;
^
这表明成员变量必须是静态的,才能将它们用作函数中的默认参数。但我不希望它们是静止的......
解决方案是什么?
答案 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