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)
我收到以下错误:
表观调用括号前的表达式必须具有(指向 - )函数类型
我想我明白为什么我收到这个错误:
当function1它本身被调用时function2(),它实际上是一个函数指针function1().
里面的范围function2,当int function1被宣布," function1变"阴影" function1函数指针".
当function1()在内部调用时function2(),它假定function1是变量并且给出错误.
通过调用Base::function1();内部来解决这个问题function2().
我的问题是:为什么编译器在声明时没有出错int function1;?这不应该被允许吗?
Mur*_*phy 10
局部变量将覆盖本地块中方法的指示符.尽量试着this->function1()打电话给它.
或者更好的是,重命名这一个或另一个以帮助人们阅读您的代码避免混淆(这包括您自己的未来).
| 归档时间: |
|
| 查看次数: |
1530 次 |
| 最近记录: |