我有一个像这样定义的四叉树:
class QuadTree{
public:
QuadTree(): is_leaf(false), NW(NULL), NE(NULL), SW(NULL), SE(NULL) {};
// Pointers to children (northwest etc.)
QuadTree* NW;
QuadTree* SW;
QuadTree* SE;
QuadTree* NE;
bool is_leaf;
int value;
};
我想从那个类继承,例如
class SpecialQuadTree: public QuadTree{
public:
int foo;
};
但是,这并不像预期的那样工作:
void insertValueIntoTree(int value, SpecialQuadTree* tree){
if(is_leaf){
tree->value = value;
return;
}
if(/*north-west is the right tree to insert into*/){
tree->foo = 42;
insertValueIntoTree(value, tree->NW); // error
}else if(...){
/*possibly insert into other children*/;
}
}
编译器抱怨它无法从 转换QuadTree*
为SpecialQuadTree*
。当然,指向孩子的指针仍然是指向基类对象的指针。
如何从基类继承并使其指针成为派生类的指针?
编辑:我已经编辑了代码以更好地反映我的意图:我必须使用派生类的成员,因此更改签名不是一种选择。