背景:
我正在用C ++构建一个物理引擎,它计算笛卡尔空间中n体系统的引力演化,然后将其转换为任何一组预定义的坐标系。最终目标是使起始坐标系任意(在坐标系'n'中计算而不是仅用笛卡尔坐标),但这是一个遥远的目标。
问题:
因为坐标系应该是可以互换的,所以我让笛卡尔坐标系扩展了一个基本坐标系:
class CoordMember {
}
class CoordState {
public:
/* methods to operate on members */
protected:
std::vector<CoordMember*> members;
}
class Particle : public CoordMember {
}
class CartState : public CoordState {
}
尝试创建类型std::vector<Particle*>
的指针时出现错误,该指针指向std::vector<CoordMember*>
类型的成员对象:
CartState* state = new CartState(/* initialization vars */);
std::vector<Particle*>* parts = static_cast< std::vector<Particle*>* >(&state->members);
编译器错误是:
error: static_cast from 'std::vector<CoordMember *> *' to 'std::vector<Particle *> *' is not allowed
error: no viable overloaded '='
此时我知道state->members
中的数据都属于Particle*
类型。我不知道要做什么才能使这个演员成为可能。有什么想法吗?
TL; DR:
std::vector<Derived*>* ptr = static_cast< std::vector<Base*>* >(&object);
static_cast from 'std::vector<Derived*>*' to 'std::vector<Base*>*' is not allowed
答案 0 :(得分:5)
演员表不起作用,因为vector
完全不相关。你必须在向量中转换每个单独的对象。