如何将我的程序转换为使用C ++命名空间?

时间:2010-02-22 20:41:22

标签: c++ visual-studio visual-studio-2008 namespaces

我的代码工作正常,直到我尝试将所有类定义包装在命名空间中。

// "Player.h"
#include "PhysicsObject.h"
namespace MaelstromII
{
    class Player : public MaelstromII::PhysicsObject
    {
        // ...
    };
}

// "PhysicsObject.h"
#include "GameObject.h"
namespace MaelstromII
{
    class PhysicsObject : public MaelstromII::GameObject
    {
        // ...
    };
}

// "GameObject.h"
namespace MaelstromII
{
    class GameObject
    {
        // ...
    };
}

当我在Visual Studio中编译时,我得到了一堆这些错误:

  

错误C2039:'PhysicsObject':不是'MaelstromII'的成员

它也抱怨GameObject

有谁知道这是为什么?

2 个答案:

答案 0 :(得分:2)

我不是100%,但我认为当你说

时会发生什么
namespace Foo
{
    class Bar : public Foo::BarBase {}
}

与:

相同
class Foo::Bar : public Foo::Foo::BarBase {}

当您在命名空间中时,您不需要使用namespace ::说明符来访问该命名空间中的其他内容。

答案 1 :(得分:0)

事实证明,麻烦是由我的代码中的循环依赖引起的。解决了这个问题后,我的代码编译得很好。

显然,这之间没有区别:

namespace Foo {
    class Bar {}
    class Bar2 : public Bar {}
}

而且:

namespace Foo {
    class Bar {}
    class Bar2 : public Foo::Bar {}
}

编译器以相同的方式解析它们。