我在X.h中声明了一个类X,如下所示:
namespace Foo {
class X{
....
};
}
在X.cc中,我想定义X的构造函数,方法。
我是否需要将所有定义都包含在namespace Foo {...}
中
或者为每种方法将X作为Foo :: X ::前缀?
似乎有时候我可以说(使用名称空间Foo)并且不再提及它, 即只是将方法定义为 X :: X(){...}
这里的正确方法是什么?
答案 0 :(得分:4)
您建议的三种方法中的任何一种都可以使用。给出:
namespace N {
struct S {
int F();
};
}
您可以将定义放在命名空间块中:
namespace N {
int S::f() { return 42; }
}
您可以使用命名空间名称限定成员名称:
int N::S::f() { return 42; }
或者您可以使用using指令(我不建议这样做):
using namespace N;
int S::f() { return 42; }
通常,我建议不要使用using指令。至于其他两个(使用命名空间块或限定名称),我认为这不重要。我在我的代码中都这样做。
答案 1 :(得分:0)
不,在定义课程时不需要使用namespace Foo {...}
。你所有的方法都是有效的,但我个人更喜欢以下方法:
// In FOO.h
namespace FOO
{
class A
{
public:
A();
};
}
实施:
// In FOO.cpp
#include "Foo.h"
FOO::A::A()
{
cout<<endl;
}