以下C ++代码是否有效?
namespace Foo
{
class Bar
{
// Class code here.
};
}
namespace Foo
{
namespace Bar
{
void SomeFunction();
{
// Function code here.
}
}
}
换句话说,是否可以存在与类同名的命名空间?
答案 0 :(得分:14)
您无法在问题中做出安排,因为无法消除Bar
的歧义。
我的编译器说:
error C2757: 'Bar' : a symbol with this name already exists and therefore this name cannot be used as a namespace name
答案 1 :(得分:12)
“是否可以存在与 a class 同名的命名空间?”
否,如果它们位于相同的命名空间中,就像您的情况一样。
否则,是的。如果它们位于不同的名称空间中,则任何名称都可以与其他名称相同。请参阅this stackoverflow线程作为参考。
答案 2 :(得分:1)
否,但是您可以让SomeFunction
是Bar
类的静态成员。
namespace Foo
{
class Bar
{
// Class code here.
static void SomeFunction()
{
// Function code here.
}
};
}
结果不是100%等于您想要的(由于ADL),但是合格的名称正是您所期望的。