从类继承,在不同的命名空间中定义

时间:2012-04-29 11:48:59

标签: c++ inheritance pointers namespaces

我有两个类,在不同的名称空间中定义:

//--==file1.hpp==--
namespace n1{
class x1 {
//.....
};
};
//--==file2.hpp==--
namespace n2{
class x1: public n1::x1{
//.....
    };
};

//--== file3.hpp ==--
namespace n2 {
 class x2 {
    private:
      n1::x1* data1_;
    public:
      void func(x1* data2) { data1_ = data2; }
  };
};

此编译失败,

error C2440: '=' : cannot convert from `'n2::x1 *' to 'n1::x1 *'`

我无法理解可能存在什么问题,因为n2:x1继承自n1 :: x1 ......? 谢谢

2 个答案:

答案 0 :(得分:1)

从一个名称空间继承到另一个名称空间类,不应该有任何编译错误。只是在子类中,如果必须调用父类的方法(在另一个名称空间中),则应使用完整名称(使用namespace)。

供您参考:

namespace a
{
class A1 {
 public:
    void testA1() {...}
};
}

namespace b
{
class B1: public class a::A1
{
 public:
    void testB1()
        {
          a::A1::testA1();
          ...
        }
};
}

但看起来,上述问题只是一个错字问题,并已得到解决。但是,为了澄清用法,示例代码应该有所帮助。

答案 1 :(得分:-1)

在file2.h中:包含file1.h

在file3.h中:包含file1.h和file2.h。

主要包括file3.h。

int main() {

n2::x2 xx22;
n2::x1* xx11;
xx22.func(xx11);

}

这很合适。