1
背景:C++如何設置類型性病的指針:: vector的<Derived*>類型爲std反對:: vector的<Base*>
我建立一個物理引擎,在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;博士:
std::vector<Derived*>* ptr = static_cast< std::vector<Base*>* >(&object);
static_cast from 'std::vector<Derived*>*' to 'std::vector<Base*>*' is not allowed
我該怎麼做?我不想將成員向量的內容複製到不同類型的向量中(因爲我想對原始成員函數進行操作),我只想將向量作爲派生類型的向量來處理函數調用。 – chpatton013 2012-08-05 22:17:12
@ chpatton013你不能,你不必複製它。在使用它們之前,只需將矢量內的元素轉換爲所需的類型即可。 – 2012-08-05 22:28:12
正如我假設的那樣,你將使用它們的多態性,解決方案首先要維護一個「矢量 」。一定要爲'Base'類定義一個虛擬析構函數。 –
marko
2012-08-05 22:35:58