доступ к родительскому пространству имен в C ++ - PullRequest
1 голос
/ 05 ноября 2010

Я использую два сторонних фреймворка. Я хочу получить доступ к новому классу из обеих платформ.

Первый фреймворк использует вложенное пространство имен, например:

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

второй фреймворк не использует пространства имен. Если я попытаюсь вызвать свой собственный класс из первого фреймворка, который использует пространство имен, я просто не смогу сделать это правильно. В лучшем случае я получаю ошибки связывания.

Мой класс выглядит так:

PlugIn_Processor.h:

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

};

PlugIn_Processor.cpp:

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

Файл cpp, который использует первый фреймворк, выглядит следующим образом:

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

Однако, что бы я ни делал, я получаю ошибки компоновщика при вызове конструктора. Решением было бы поместить все под пространство имен сторонней платформы, но, поскольку я хочу получить доступ к этому классу из разных структур, я не хочу помещать все в это пространство имен. Что я мог сделать, чтобы обойти это? Все, что я пробовал, просто провалилось.

1 Ответ

0 голосов
/ 05 ноября 2010

Чтобы получить доступ к родительской области, используйте двойное двоеточие (: :), как в:

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

Обратите внимание, однако, что в вашем примере следующий код не должен компилироваться:

3rdparty::3rdparty{

Это на самом деле фрагмент кода?И он действительно скомпилировал для вас?Кроме того, убедитесь, что вы действительно связываетесь с модулем компиляции, в котором был определен указанный класс.

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