Как я преобразовываю свою программу для использования пространств имен C++?

Мой код хорошо работал, пока я не пытался перенести все свои определения классов в пространстве имен.

// "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, также.

Кто-либо знает, почему это?

1
задан andrewtc 22 February 2010 в 20:41
поделиться

2 ответа

Оказывается, проблема была вызвана циклической зависимостью в моем коде где-то еще. После устранения этой проблемы мой код компилировался нормально.

Очевидно, нет никакой разницы между этим:

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

И этим:

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

Компилятор решает их таким же образом.

0
ответ дан 3 September 2019 в 01:10
поделиться

Я не уверен на 100%, но я думаю, что то, что происходит, когда вы говорите

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

это то же самое, что:

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

Когда вы находитесь в пространстве имен, вам не нужно использовать спецификатор namespace:: для доступа к другим вещам в этом пространстве имен.

2
ответ дан 3 September 2019 в 01:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: