2011-10-24 59 views

回答

5

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

来自外部命名空间的名称bar被新声明隐藏。它必须被明确地调用,或者通过使用声明使其可见:

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

没错,但不能告诉编译器它应该继续搜索吗?为什么没有尝试别的东西就会失败? – Mehrdad

+0

@Mehrdad:查看编辑。 –

+0

哦,所以这个名字是隐藏的...有趣的,谢谢。 +1 – Mehrdad

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

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

相关问题