变量名称与函数名称相同,给出编译器错误...为什么?

Rob*_*vre 5 c++ scope declaration name-lookup name-hiding

今天进入一个有趣的问题,我试图理解为什么.

考虑以下:

class Base
{
public:
    Base(){}
    ~Base(){}
    static void function1(){}
        void function2()
        {
           int function1;
           function1 = 0;
           function1();   //<-compiler error
           function1 = 1;
        }
};
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

表观调用括号前的表达式必须具有(指向 - )函数类型

我想我明白为什么我收到这个错误:

  1. function1它本身被调用时function2(),它实际上是一个函数指针function1().

  2. 里面的范围function2,当int function1被宣布," function1变"阴影" function1函数指针".

  3. function1()在内部调用时function2(),它假定function1是变量并且给出错误.

  4. 通过调用Base::function1();内部来解决这个问题function2().

我的问题是:为什么编译器在声明时没有出错int function1;?这不应该被允许吗?

Mur*_*phy 10

局部变量将覆盖本地块中方法的指示符.尽量试着this->function1()打电话给它.

或者更好的是,重命名这一个或另一个以帮助人们阅读您的代码避免混淆(这包括您自己的未来).