小编Rob*_*vre的帖子

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

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

考虑以下:

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;?这不应该被允许吗?

c++ scope declaration name-lookup name-hiding

5
推荐指数
1
解决办法
1530
查看次数

标签 统计

c++ ×1

declaration ×1

name-hiding ×1

name-lookup ×1

scope ×1