为什么函数bar()
不能在这里重载是什么原因?
namespace foo
{
void bar(int) { }
struct baz
{
static void bar()
{
// error C2660: 'foo::baz::bar' : function does not take 1 arguments
bar(5);
}
};
}
答案 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
}
};
}
编辑:这显然不会超载。