【发布时间】:2016-07-03 08:57:43
【问题描述】:
这是我的代码:
struct S
{
int f() { return 1; }
int g(int arg = f()) { return arg; }
};
int main()
{
S s;
return s.g();
}
编译失败,报错:
error: cannot call member function 'int S::f()' without object
尝试this->f() 也不起作用,因为this 可能无法在这种情况下使用。
有没有办法让它工作,仍然使用默认参数?
当然,完全不使用默认参数也可以解决这个问题:
int g(int arg) { return arg; }
int g() { return g(f()); }
但是考虑到在“真实代码”中arg 之前有更多参数,以及遵循此模式的几个函数,这就变得冗长了。 (如果一个函数中有多个默认参数,那就更丑了)。
注意。 This question 起初看起来很相似,但实际上他在问如何形成闭包,这是一个不同的问题(并且链接的解决方案不适用于我的情况)。
【问题讨论】:
-
应该是
int g() { return g(f()); }吧?至少,在真正的代码中,这可能很有意义。当然,在这里它适用于您只有g中的return语句。 -
@skypjack 谢谢,已修复
标签: c++ member-functions default-arguments