今日興味深い問題に遭遇し、その理由を理解しようとしています。
次の点を考慮してください。
class Base
{
public:
Base(){}
~Base(){}
static void function1(){}
void function2()
{
int function1;
function1 = 0;
function1(); //<-compiler error
function1 = 1;
}
};
次のエラーが表示されます。
明白な呼び出しの括弧の前にある式は、(ポインターへの) 関数型でなければなりません
このエラーが発生する理由を理解していると思います:
function1
が の外で単独で呼び出される場合function2()
、実際には への関数ポインタfunction1()
です。のスコープ内で
function2
がint function1
宣言されると、'function1
変数' が 'function1
関数ポインタ' を隠します。function1()
内部で が呼び出されると、が変数であるとfunction2()
想定され、エラーが発生します。function1
Base::function1();
これは、 insideを呼び出すことで修正されfunction2()
ます。
私の質問はこれです:宣言時にコンパイラがエラーを出さないのはなぜint function1;
ですか? これは許されるべきではないのですか?