Ccc名称空间包含在.cc文件中

时间:2010-09-08 14:50:00

标签: c++ namespaces

我在X.h中声明了一个类X,如下所示:

namespace Foo {
 class X{
....
};

}

在X.cc中,我想定义X的构造函数,方法。

我是否需要将所有定义都包含在namespace Foo {...}中 或者为每种方法将X作为Foo :: X ::前缀?

似乎有时候我可以说(使用名称空间Foo)并且不再提及它, 即只是将方法定义为 X :: X(){...}

这里的正确方法是什么?

2 个答案:

答案 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;
}