Почему здесь не работает разрешение области? - PullRequest
1 голос
/ 25 октября 2011

По какой причине функция bar() не может быть здесь перегружена?

namespace foo
{
    void bar(int) { }

    struct baz
    {
        static void bar()
        {
            // error C2660: 'foo::baz::bar' : function does not take 1 arguments
            bar(5); 
        }
    };
}

Ответы [ 2 ]

5 голосов
/ 25 октября 2011

Его нельзя перегружать, потому что они находятся в разных областях. Первый bar находится на foo::bar, а второй на foo::baz::bar.

Имя bar из внешнего пространства имен скрыто новым объявлением. Он должен быть вызван явно или сделан видимым с помощью объявления using:

static void bar()
{
    using foo::bar;
    bar(5); 
}
0 голосов
/ 25 октября 2011

Это то, что вы пытаетесь сделать?

namespace foo
{
    void bar(int) { }

    struct baz
    {
        static void bar()
        {
            // error C2660: 'foo::baz::bar' : function does not take 1 arguments
            foo::bar(5); // <-- changed
        }
    };
}

РЕДАКТИРОВАТЬ: Это также, очевидно, не будет перегружен.

...