【发布时间】:2012-04-29 11:48:59
【问题描述】:
我有 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...? 谢谢
【问题讨论】:
-
您能否通过将两个类放在同一个命名空间中查看问题是否消失来检查(如您的问题所暗示的)命名空间是否是问题的一部分?
-
//--== file3.hpp ==-- namespace2??namespce n2你的意思是? -
@Lol4t0 - 谢谢 - 我修正了错字
-
@BlueMonkMN - 很难做到 - 许多额外的课程都基于它
-
好的,但是它可以正常工作:ideone.com/DYQV8。你使用前向类型声明吗?
标签: c++ inheritance pointers namespaces