今天遇到一个有趣的问题,并试图理解原因。
考虑以下:
class Base
{
public:
Base(){}
~Base(){}
static void function1(){}
void function2()
{
int function1;
function1 = 0;
function1(); //<-compiler error
function1 = 1;
}
};
我收到以下错误:
显式调用括号前的表达式必须具有(指针指向)函数类型
我想我明白为什么会收到此错误:
当在function1
外部自身调用时function2()
,它实际上是指向的函数指针function1()
。
在的范围内function2
,int function1
声明时,“function1
变量”function1
与“函数指针”无关。
在function1()
内部调用时function2()
,假设function1
是变量并给出错误。
这是通过调用Base::function1();
inside来解决的function2()
。
我的问题是:为什么编译器在声明时不给出错误int function1;
?难道这不被允许吗?
局部变量将覆盖局部块中方法的指示符。this->function1()
尽管如此,还是尝试称呼它。
或者更好的是,重命名一个或另一个,以帮助人们阅读您的代码以避免混淆(这包括您自己的未来)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句