Мой код хорошо работал, пока я не пытался перенести все свои определения классов в пространстве имен.
// "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
, также.
Кто-либо знает, почему это?
Оказывается, проблема была вызвана циклической зависимостью в моем коде где-то еще. После устранения этой проблемы мой код компилировался нормально.
Очевидно, нет никакой разницы между этим:
namespace Foo {
class Bar {}
class Bar2 : public Bar {}
}
И этим:
namespace Foo {
class Bar {}
class Bar2 : public Foo::Bar {}
}
Компилятор решает их таким же образом.
Я не уверен на 100%, но я думаю, что то, что происходит, когда вы говорите
namespace Foo
{
class Bar : public Foo::BarBase {}
}
это то же самое, что:
class Foo::Bar : public Foo::Foo::BarBase {}
Когда вы находитесь в пространстве имен, вам не нужно использовать спецификатор namespace:: для доступа к другим вещам в этом пространстве имен.