类可以共享命名空间的名称吗?

Max*_*xpm 20 c++ symbols namespaces class

以下C++代码是否有效?

namespace Foo
{
    class Bar
    {
        // Class code here.
    };
}
Run Code Online (Sandbox Code Playgroud)

namespace Foo
{
    namespace Bar
    {
        void SomeFunction();
        {
            // Function code here.
        }
    }
 }
Run Code Online (Sandbox Code Playgroud)

换句话说,是否可以存在与类同名的命名空间?

qua*_*ana 16

你不能在你的问题中得到你的安排,因为没有办法消除歧义Bar.

我的编译器说:

error C2757: 'Bar' : a symbol with this name already exists and therefore this name cannot be used as a namespace name
Run Code Online (Sandbox Code Playgroud)

  • @Maxpm:编译器在检查内部之前必须首先消除"Bar"的歧义.如果你调用`Foo :: Bar :: SomeFunction();`,那么编译器应该说'OK'还是应该说'Error' - 类Bar没有成员? (5认同)

Oza*_*ray 15

"可以有一个与同名的命名空间吗?"

,如果它们位于相同的命名空间中,就像在您的情况下一样.

否则,是的.如果它们位于不同的名称空间中,则任何名称都可以与其他名称相同.请参阅 stackoverflow线程作为参考.

  • 好.澄清这个答案:如果它们位于不同的名称空间中,任何东西都可以与其他任何名称相同; 如果类在同一名称空间中,则它们不能与名称空间具有相同的名称. (6认同)