gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:59:24 26 4
gpt4 key购买 nike

今天遇到一个有趣的问题,我想了解原因。

考虑以下几点:

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

我想我明白为什么会出现此错误:

  1. function1function2()之外被自己调用时,实际上是指向function1()的函数指针。

  2. function2 的范围内,当声明 int function1 时,'function1 变量'遮蔽'function1 函数指针'。

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

  4. 这可以通过在 function2() 中调用 Base::function1(); 来解决。

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

最佳答案

局部变量覆盖局部 block 中方法的指示符。尽管如此,请尝试 this->function1() 调用它。

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

关于c++ - 变量名与函数名相同,给出编译器错误...为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34887070/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com