c ++中的匿名命名空间无法访问标头

Ork*_*zen 0 c++

enum标题中有一个:

namespace somespace
{
    namespace internal
    {

        class SomeClass
        {
            public:

                typedef enum
                {
                    kNone = 0,
                    kKaka = 1,
                }SomeEnum;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在cpp中,我们有时会使用带有辅助函数的匿名命名空间.

#include <somespace/internal/SomeClass.h>

using somespace::internal;

namespace
{

    bool helpMe(SomeEnum& foo) //does not recognize the enum in the header
    {

    }
}

void SomeClass::memberMethod
{

}
Run Code Online (Sandbox Code Playgroud)

但我无法访问SomeEnum.cpp的文件.这是为什么?例如,如何在不污染internal命名空间的情况下解决这个问题?

Nat*_*ica 8

SomeEnum的范围是它声明的类名.要使用它,你需要它SomeClass::SomeEnum.这假定SomeClass您可以在您拥有的范围内访问它.如果没有,那么你需要somespace::internal::SomeClass::SomeEnum