0

次のコードは、警告やエラーなしでコンパイルされます。

#include <iostream>
using namespace std;
class demo_class
{
    int x;
    float y;
    public:
    void fun(void);
};
void fun2(void)
{
    cout<<"i am fun2\n";
}
void demo_class::fun(void)
{
    cout<<"i am fun\n";
    cout<<"i can call fun2\n";
    fun2();
}
int main()
{
    demo_class ob1;
    ob1.fun();
    return 0;
}

fun 関数のスコープが demo_class にのみあるため、fun2 関数を呼び出す方法を理解していません。

4

2 に答える 2

2

名前ルックアップは、任意のスコープで少なくとも 1 つが見つかるまで、可能なすべてのスコープを調べようとし、名前ルックアップは停止します。

この場合、名前fun2がクラス スコープで見つからないため、さらにスコープ、つまりグローバル スコープが調べられ::fun2て見つかります。

于 2019-06-11T08:38:14.377 に答える