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*>typeのメンバー オブジェクトを指すtype のポインターを作成しようとすると、エラーが発生します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
4

1 に答える 1

5

vectors は完全に無関係であるため、キャストは機能しません。ベクター内の個々のオブジェクトをそれぞれキャストする必要があります。

于 2012-08-05T22:14:47.320 に答える