Как мне преобразовать мою программу в пространства имен C ++? - PullRequest
1 голос
/ 22 февраля 2010

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

// "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 ]

2 голосов
/ 22 февраля 2010

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

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

совпадает с:

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

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

0 голосов
/ 23 февраля 2010

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

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

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

А это:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...