变量名与函数名相同,导致编译器错误...为什么?

罗伯特·勒菲佛尔

今天遇到一个有趣的问题,并试图理解原因。

考虑以下:

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

我收到以下错误:

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

我想我明白为什么会收到此错误:

  1. 当在function1外部自身调用时function2(),它实际上是指向的函数指针function1()

  2. 在的范围内function2int function1声明时,“function1变量”function1与“函数指针”无关。

  3. function1()内部调用时function2(),假设function1是变量并给出错误。

  4. 这是通过调用Base::function1();inside来解决的function2()

我的问题是:为什么编译器在声明时不给出错误int function1;难道这不被允许吗?

墨菲

局部变量将覆盖局部块中方法的指示符。this->function1()尽管如此,还是尝试称呼它。

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么不以不同单位调用具有相同签名的函数会导致编译器错误?

为什么我们在python中使用与namedtuple的类型名相同的变量名?

为什么此模板变量导致编译器警告?

为什么不大写类名会在此处导致编译器错误?

为什么在此处添加临时变量会使此编译器错误消失?类型相同

为什么一个空的Lambda和构造函数导致编译器错误明确的回报(Java的漏洞?)

为什么将“ <<”运算符作为函数调用会导致“歧义调用”编译器错误?

为什么向这个 Haskell 函数提供一个空列表会导致编译器错误?

为什么当表达式导致编译器错误而不是语句导致非穷尽时?

为什么 AVR-GCC 编译器在使用相同的变量但作为 PROGMEM 重载时会抛出错误?

类的变量名与函数名相同

为什么编译器会给出警告以及相同错误的错误?

JS:为什么在保持变量和变量名相同的情况下声明不带var的变量时,“严格模式”没有显示参考错误

为什么将基类用于方法引用会导致编译器错误

为什么此嵌套的通用类型转换会导致编译器错误

为什么陈述“ 2i;” 不会导致编译器错误?

为什么插入const字符串会导致编译器错误?

为什么编译器会导致“处理时检测到循环......”的错误?

为什么G ++编译器不以相同的方式对待这两个函数?

为什么我的编译器创建重复的汇编函数

为什么编译器不能匹配此函数类型?

为什么编译器不会生成重复错误?

为什么会发生此编译器错误?

为什么“可能缺乏精度”不是编译器错误?

为什么编译器不抱怨此错误?

为什么unsafeBitCast不是编译器错误?

为什么编译器没有给出冲突的错误?

为什么编译器选择了错误的方法重载?

为什么 Python 3.10 中的关键字`match` 可以作为变量名或函数名?