6

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

//--==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 ...?谢谢

4

2 回答 2

3

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

供您参考:

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

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

但是看起来,上面的问题只是一个错字问题,并且已经解决了。但是,为了澄清用法,示例代码会有所帮助。

于 2018-01-16T15:06:58.927 回答
-1

在 file2.h 中:包含 file1.h

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

主要包括file3.h。

int main() {

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

}

这符合得很好。

于 2012-04-29T12:15:58.193 回答