C++命名空间问题

sho*_*fee 0 c++ namespaces

我有三个类,所有这些类都来自不同的命名空间,如下所示:

classA.h

namespace outer
{
    namespace inner
    {
        class ClassA
        {
           ....
        };
    }
}
Run Code Online (Sandbox Code Playgroud)

classB.h

namespace inner
{
    class ClassB
    {
        ...
    };
}
Run Code Online (Sandbox Code Playgroud)

classC.h

#include <classB.h>

namespace outer
{
    namespace inner2
    {
        using inner::ClassB; // error here, says outer::inner2::ClassB has not been declared.

        class ClassC
        {
            ....
        };
     }
}
Run Code Online (Sandbox Code Playgroud)

我被困在这,请帮我解决这个问题.

Luc*_*ore 9

你需要

using ::inner::ClassB;
Run Code Online (Sandbox Code Playgroud)

因为在namespace outer,您有2个选项inner

  • ::inner - 全局命名空间
  • ::outer::inner- outer命名空间

默认情况下,using inner::ClassB;会尝试导入ClassBouter::inner.

  • @shobi不同的文件,相同的命名空间.你在某个地方包含一个声明命名空间`inner`作为`outer`的一部分的文件,所以如果你想使用全局命名空间,你必须显式地声明`:: inner`. (3认同)
  • @shobi他们不是独立的.它可能不可见,但它们不是.你想要什么其他修复?这有什么问题?另一个修复是重命名您的命名空间.我个人会从全球范围中删除`inner`. (2认同)