为什么范围解析在这里不起作用?

发布于 2024-12-12 00:47:02 字数 283 浏览 0 评论 0原文

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

namespace foo
{
    void bar(int) { }

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

What is the reason why the function bar() can't be overloaded here?

namespace foo
{
    void bar(int) { }

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

远昼 2024-12-19 00:47:02

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

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

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

It cannot be overloaded because they are at different scopes. The first bar is at foo::bar while the second one is at foo::baz::bar.

The name bar from the outer namespace is hidden by the new declaration. It has to either be called explicitly, or made visible by a using declaration:

static void bar()
{
    using foo::bar;
    bar(5); 
}
望笑 2024-12-19 00:47:02

这就是你想做的吗?

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
        }
    };
}

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

Is this what you're trying to do?

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
        }
    };
}

EDIT: That's also obviously not going to be overloading.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文