我有4個類:Foundation
,FoundationWidget
,Game
和GameWidget
。 FoundationWidget
延伸Foundation
和GameWidget
延伸Game
。C++ std :: array cast
Game
還包含Foundation
秒的標準::陣列和GameWidget
包含FoundationWidget
秒的標準::陣列。 Game
也包含一個虛擬方法,它應該返回指向數組Foundation
s的指針。 GameWidget
通過返回指向其FoundationWidget
的數組的指針覆蓋此方法。 目前(非工作)的實現看起來是這樣的:
class Game {
std::array<Foundation, 4> foundations;
private:
virtual std::array<Foundation, 4>* get_foundations() {
return &this->foundations;
}
}
class GameWidget : public Game {
std::array<FoundationWidget, 4> foundations;
private:
std::array<Foundation, 4>* get_foundations() {
return &this->foundations;
}
}
我期望這個工作,因爲它是與類相同大小的陣列,擴展指定爲返回類型的人,而是我收到這個錯誤:cannot convert ‘std::array<FoundationWidget, 4ul>*’ to ‘std::array<Foundation, 4ul>*’ in return
。
我也試着將類屬性聲明爲指針數組,但結果是一樣的。 static_cast或dynamic_cast都沒有幫助。
我在這裏錯過了什麼?有沒有什麼方法來投射數組?如果不是,我可以使用一些建設來獲得相同的結果,即「虛擬」類成員嗎?
如果'FoundationWidget'從'Foundation'繼承爲什麼不只是有一個'的std ::陣列<基金會*,4>'(或'其他一些指針類型GameWidget'? – NathanOliver
也,你回來'STD :: array *'這是一個指針類型,如果你正在考慮類似getter的東西,你應該小心不要返回一個臨時/局部變量的指針 –
@NathanOliver謝謝你的評論。已經解決了這個問題,但是我仍然對這個演員感興趣 – sveatlo