如何解决此命名空间问题?

时间:2012-01-21 21:22:54

标签: c++ namespaces

我有以下情况

    namespace A {
    //...
    class A {
        public:
        static void foo();
    }
    //...
    } //namespace A

当我尝试使用A :: foo()从另一个类访问foo()时,编译器会抱怨“foo不是A的成员”,当我尝试使用A :: A :: foo()时抱怨未解决的外部问题。

我该如何解决这个问题?我认为在同一名称空间内创建一个类是非常愚蠢的并且导致混淆但是我不是代码的作者并且更改名称空间或类名会导致太多麻烦

2 个答案:

答案 0 :(得分:3)

您可以使用::来到命名空间层次结构的顶部。所以你的班级是:: A :: A

编辑:上面回答了关于命名空间的主要问题。但正如其他人指出的那样,你的问题是你没有定义foo。添加

内联void A :: A :: foo(){};

答案 1 :(得分:1)

您希望使用完整的资格认证,例如A::A::foo()(如果您坚持完全认证,则甚至是::A::A::foo())。函数未解析的事实只表示您尚未定义它:

inline void A::A::foo() { ... }

...如果头文件中没有定义,则跳过inline

顺便说一句,我不认同你的论点“引起太多麻烦”:如果某些东西是非常愚蠢的(即你的团队成员同意这是错误的事情),那么应该早点解决问题!等待的时间越长,问题就越多,问题就越多!