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

时间:2016-02-05 14:44:27

标签: c++

标题中有enum

namespace somespace
{
    namespace internal
    {

        class SomeClass
        {
            public:

                typedef enum
                {
                    kNone = 0,
                    kKaka = 1,
                }SomeEnum;
        }
    }
}

在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
{

}

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

1 个答案:

答案 0 :(得分:8)

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