1

的背景:

我正在用 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都是 type的事实Particle*。我不知道要做什么才能使这个演员成为可能。有任何想法吗?

tl;博士:

std::vector<Derived*>* ptr = static_cast< std::vector<Base*>* >(&object);
static_cast from 'std::vector<Derived*>*' to 'std::vector<Base*>*' is not allowed
4

1 回答 1

5

演员表不起作用,因为vectors完全不相关。您必须将每个单独的对象投射到向量中。

于 2012-08-05T22:14:47.320 回答