C ++中命名空间中的命名空间

时间:2018-12-24 20:24:44

标签: c++

此代码产生以下编译错误:名称空间“ MyNameSpace2 :: MyNameSpace1”中的“ MyClass”未命名类型

namespace MyNameSpace1 {
    class MyClass {
    };
}

namespace MyNameSpace2 {
    namespace MyNameSpace1 {
    }

    MyNameSpace1::MyClass a;
}


int main() {
    return 0;
}

但是删除空的命名空间

namespace MyNameSpace1 {
}

解决编译错误。删除外部名称空间也可以消除编译错误。似乎名称空间中的名称空间具有特殊的语义,限制了编译器从内部名称空间下面的代码的外部名称空间中搜索标识符!多么奇怪的规则?您能否解释或分享有关该主题的详细说明的链接?预先感谢。

0 个答案:

没有答案