我有两个类,在不同的名称空间中定义:
//--==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 ......? 谢谢
答案 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);
}
这很合适。