백그라운드 :C++ : 벡터 <Base*>
내가 N-의 중력 진화를 계산 C++에 물리 엔진을 짓고 있어요 몸체 시스템을 데카르트 공간에 배치 한 다음 사전 정의 된 좌표계 세트로 변환합니다. 궁극적으로 목표는 시작 좌표계를 임의로 만드는 것입니다 (데카르트 만이 아닌 좌표계 '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 다음 vector
들 전혀 관계가없는 이기 때문에
std::vector<Derived*>* ptr = static_cast< std::vector<Base*>* >(&object);
static_cast from 'std::vector<Derived*>*' to 'std::vector<Base*>*' is not allowed
어떻게해야합니까? 나는 구성원 벡터의 내용을 다른 유형의 벡터에 복사하고 싶지 않습니다. (원 구성원 함수를 조작하고 싶습니다.) 저는 벡터를 파생 된 형식의 벡터로 취급하고 싶습니다. 함수 호출. – chpatton013
@ chpatton013 할 수 없으므로 복사 할 필요가 없습니다. 벡터 내부의 요소를 사용하기 전에 필요한 유형으로 캐스트하십시오. –
여러분은 그것들을 다형성으로 사용하게 될 것이고, 해결책은 처음에는'벡터 '을 유지하는 것입니다. 'Base' 클래스에 대한 가상 소멸자를 정의해야합니다. –
marko