我的代码工作正常,直到我尝试将所有类定义包装在命名空间中。
// "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
。
有谁知道这是为什么?
答案 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 {}
}
编译器以相同的方式解析它们。