1

bar()这里函数不能重载的原因是什么?

namespace foo
{
    void bar(int) { }

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

2 回答 2

5

它不能被重载,因为它们在不同的范围内。第一个bar是 atfoo::bar而第二个是 at foo::baz::bar

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

static void bar()
{
    using foo::bar;
    bar(5); 
}
于 2011-10-25T00:00:07.783 回答
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
        }
    };
}

编辑:这显然也不会超载。

于 2011-10-25T00:02:16.233 回答