我有以下情况
namespace A {
//...
class A {
public:
static void foo();
}
//...
} //namespace A
当我尝试使用A :: foo()从另一个类访问foo()时,编译器会抱怨“foo不是A的成员”,当我尝试使用A :: A :: foo()时抱怨未解决的外部问题。
我该如何解决这个问题?我认为在同一名称空间内创建一个类是非常愚蠢的并且导致混淆但是我不是代码的作者并且更改名称空间或类名会导致太多麻烦
答案 0 :(得分:3)
您可以使用::来到命名空间层次结构的顶部。所以你的班级是:: A :: A
编辑:上面回答了关于命名空间的主要问题。但正如其他人指出的那样,你的问题是你没有定义foo。添加
内联void A :: A :: foo(){};
答案 1 :(得分:1)
您希望使用完整的资格认证,例如A::A::foo()
(如果您坚持完全认证,则甚至是::A::A::foo()
)。函数未解析的事实只表示您尚未定义它:
inline void A::A::foo() { ... }
...如果头文件中没有定义,则跳过inline
。