为什么范围分辨率不适用于此?

时间:2011-10-24 23:58:32

标签: c++ visual-c++ scope overloading scope-resolution

为什么函数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 个答案:

答案 0 :(得分:5)

它不能超载,因为它们处于不同的范围。第一个bar位于foo::bar,而第二个位于foo::baz::bar

新声明隐藏了外部命名空间中的名称bar。它必须被显式调用,或者通过using声明使其可见:

static void bar()
{
    using foo::bar;
    bar(5); 
}

答案 1 :(得分:0)

这是你想要做的吗?

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
        }
    };
}
编辑:这显然不会超载。