我试图将当前的 length 值作为默认参数作为函数参数传递。
但编译器显示错误
“在此上下文中不得使用‘this’”
谁能告诉我我犯了什么错误? ?
class A
{
private:
int length;
public:
A();
void display(int l=this->length)
{
cout<<"the length is "<<l<<endl;
}
};
int main()
{
A a;
a.display();
return 0;
}
您的会员功能:
void display(int l=this->length)
在概念上等价于:
void display(A * this, int l=this->length); //translated by the compiler
这意味着,您在表达式中使用的一个参数是 C++ 中不允许的其他参数的默认参数,如 §8.3.6/9 (C++03) 所说,
默认参数分别进行评估
调用函数的时间。命令
函数参数的求值是
未指定. 因此,参数
函数的不得用于
默认参数表达式, 即使
他们没有被评估。
请注意,C++ 不允许这样做:
int f(int a, int b = a); //illegal : §8.3.6/9
解决方案是添加一个不带参数的重载:
void display()
{
display(length); //call the other one!
}
如果您不想再添加一项功能选择一个不可能的默认值为参数。例如,由于它描述了length永远不可能是负数,那么你可以选择-1
作为默认值,您可以将您的函数实现为:
void display(int l = -1)
{
if ( l <= -1 )
l = length; //use it as default value!
//start using l
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)