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

スコープが異なるため、オーバーロードすることはできません。1つ目barはにfoo::barあり、2つ目はにあり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 に答える