今天遇到一个有趣的问题,并试图了解原因。
考虑以下:
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;
?这不应该被允许吗?