2010-11-05 3 views
1

J'utilise deux frameworks tiers. Je veux accéder à une nouvelle classe à partir des deux frameworks.accéder à l'espace de noms parent en C++

Le premier cadre utilise un espace de noms imbriqué comme:

namespace space1 { 
    namespace space2 { 
     class 3rdparty{ 
     } 
    } 
} 

le deuxième cadre ne pas utiliser les espaces de noms. Si j'essaie d'appeler ma propre classe à partir du premier cadre qui utilise l'espace de noms, je ne peux tout simplement pas le faire correctement. Dans le meilleur des cas, je me retrouve avec des erreurs de liaison.

ma classe ressemble à ceci:

PlugIn_Processor.h:

class PlugIn_Processor{ 
public: 
    //constructor 
    PlugIn_Processor(); 

}; 

PlugIn_Processor.cpp:

#include "PlugIn_Processor.h" 
    PlugIn_Processor::PlugIn_Processor(){ 
}; 

Le fichier cpp qui utilise le premier cadre ressemble à ceci:

 namespace space1 { 
     namespace space2 { 
      3rdparty::3rdparty{ 
        PlugIn_Processor * plugIn_Processor; 
        plugIn_Processor = new PlugIn_Processor(); 
      } 
     } 
    } 

Cependant, quoi que je fasse, je finis avec des erreurs de l'éditeur de liens lors de l'appel du constructeur. Une solution consisterait à tout mettre sous l'espace de nom du framework tiers, mais comme je veux accéder à cette classe à partir de différents frameworks, je ne veux pas tout mettre sous cet espace de noms. Que pouvais-je faire pour contourner ce problème? Tout ce que j'ai essayé a échoué.

+0

Pourriez-vous poster un code compilable qui produira l'erreur de l'éditeur de liens? C'est juste que les fragments de code actuels ne sont pas clairs. – Poni

+0

Je suis d'accord. En outre, avez-vous essayé d'inclure l'espace de noms parent dans l'espace de noms enfant, ou y accéder via son nom d'espace de noms? –

Répondre

0

Pour accéder à un champ parent, utilisez un double deux points (:) comme:

class Blah; 
namespace alpha 
{ 
    class Blah; 
} 
namespace bravo 
{ 
     class Blah; 
     // can access outer class as ::Blah 
     // and one from alpha as ::alpha::Blah 
} 

Notez, cependant, que dans votre exemple le code suivant ne devrait pas compiler:

3rdparty::3rdparty{ 

Est-ce réellement un extrait de code? Et a-t-il vraiment compilé pour vous? Assurez-vous également de vérifier que vous êtes réellement lié à l'unité de compilation dans laquelle la classe référencée a été définie.

+1

merci, vous avez raison. Mon compilateur n'a pas lié mes ressources correctement, comme il se doit. fixé manuellement et maintenant tout semble être bon. –

+4

:: n'accède pas à l'espace de noms parent, c'est un espace de noms global – ShitalShah

Questions connexes