今天遇到一个有趣的问题,我想了解原因。
考虑以下几点:
class Base
{
public:
Base(){}
~Base(){}
static void function1(){}
void function2()
{
int function1;
function1 = 0;
function1(); //<-compiler error
function1 = 1;
}
};
我收到以下错误:
expression preceding parentheses of apparent call must have (pointer-to-) function type
我想我明白为什么会出现此错误:
function1
在function2()
之外被自己调用时,实际上是指向function1()
的函数指针。在
function2
的范围内,当声明int function1
时,'function1
变量'遮蔽'function1
函数指针'。当在
function2()
中调用function1()
时,它假定function1
是变量并给出错误.这可以通过在
function2()
中调用Base::function1();
来解决。
我的问题是:为什么编译器在声明 int function1;
时不报错?这不应该被允许吗?
最佳答案
局部变量覆盖局部 block 中方法的指示符。尽管如此,请尝试 this->function1()
调用它。
或者更好的是,重命名一个或另一个以帮助人们阅读您的代码避免混淆(这包括您自己的 future )。
关于c++ - 变量名与函数名相同,给出编译器错误...为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34887070/