2010-02-22 3 views
1

Mon code fonctionnait correctement, jusqu'à ce que j'essaie d'envelopper toutes mes définitions de classe dans un espace de noms.Comment puis-je convertir mon programme pour utiliser les espaces de noms 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 
    { 
     // ... 
    }; 
} 

Quand je compile dans Visual Studio, je reçois un tas de ces erreurs:

erreur C2039: 'PhysicsObject': n'est pas membre du 'MaelstromII'

Il se plaint de GameObject, aussi.

Est-ce que quelqu'un sait pourquoi c'est?

+5

Lorsque vous êtes déjà dans le même espace de noms, vous pouvez simplement faire 'public PhysicsObject' à la place de' public MaelstromII :: PhysicsObject'. – GManNickG

Répondre

0

Il s'avère que le problème a été causé par une dépendance circulaire dans mon code ailleurs. Après avoir résolu ce problème, mon code a bien été compilé.

De toute évidence, il n'y a pas de différence entre ceci:

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

Et ceci:

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

Le compilateur les résout de la même manière.

2

Je ne suis pas à 100%, mais je pense que ce qui se passe quand vous dites

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

est le même que:

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

Lorsque vous êtes dans un espace de noms, vous n » t besoin d'utiliser le spécificateur namespace :: pour accéder à d'autres choses dans cet espace de noms.

+0

C'est vrai, mais cela ne va pas non plus provoquer d'erreur, car cela continuera à remonter la hiérarchie de l'espace de noms à la recherche de 'Foo :: BarBase' et le trouvera par rapport à l'espace de niveau supérieur. – Troubadour

+0

Aha? Apprendre quelque chose de nouveau chaque jour. Merci! – Narfanator

Questions connexes