在c ++中访问父命名空间

时间:2010-11-05 01:41:00

标签: c++ namespaces

我正在使用两个第三方框架。我想从两个框架中访问一个新类。

第一个框架使用嵌套的命名空间,如:

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

第二个框架不使用任何名称空间。 如果我尝试从使用命名空间的第一个框架调用我自己的类,我根本无法做到正确。在最好的情况下,我最终会遇到链接错误。

My Class看起来像这样:

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 :(得分:0)

要访问父作用域,请使用双冒号(::),如下所示:

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{

这实际上是一段代码吗?它真的为你编译吗?此外,请务必检查您是否实际链接了定义引用类的编译单元。