Ran into an interesting issue today and am trying to understand why.
Consider the following:
class Base
{
public:
Base(){}
~Base(){}
static void function1(){}
void function2()
{
int function1;
function1 = 0;
function1(); //<-compiler error
function1 = 1;
}
};
I am getting the following error:
expression preceding parentheses of apparent call must have (pointer-to-) function type
I think I understand why I am getting this error:
When
function1is called by itself outside offunction2(), it is actually a function pointer tofunction1().Inside the scope of
function2, whenint function1is declared, 'function1the variable' shadows 'function1the function pointer'.When
function1()is called insidefunction2(), it is assumingfunction1is the variable and is giving an error.This is fixed by calling
Base::function1();insidefunction2().
My question is this: Why doesn't the compiler give an error when declaring int function1;? Shouldn't this not be allowed?