我真的搜查所有在互聯網上,無法找到一個方法來解決它,所以這裏是我的問題:推回子類對象基類的2D矢量在C++
我創建了一個名爲「GridPoint公司」類來表示一個二維地圖的每個點,然後是一個類型爲Gridpoint *的二維矢量來存儲和打印整個地圖(n^2個網格對象)
另外,我有一個名爲「Ship」的基類(包含船一般情況下)和6個具有額外功能的船舶(例如「海盜」)的子類。
所以,我想創建一個空的帶有6行的Ship類型的2d向量來存儲每個子類創建的對象。 (例如第4行 - >所有海盜船)。
但是,儘管所有對象(來自Ship子類)都已成功創建,但矢量中並未存儲任何內容,並且它仍爲空。
我應該怎樣做push_back成功push_back每個對象在正確的行,它創建的那一刻?
下面是「參與」向量和對象的創建和push_back(僅適用於子類Pirate)的所有函數的簡化版本。欲瞭解更多信息或代碼,只是問我:
void createShip0(vector<vector<GridPoint*>, vector<vector<Ship*> >, int, int, double, double, int, int, int)
int main()
{
int n = 10;
vector<GridPoint*> gcol(n);
vector<vector<GridPoint*> > GridMap(n, gcol);
vector<vector<Ship*> > ShipArray(7);
int i = rand() % n;
int j = rand() % n;
double MxEnd = rand() % 5 + 5;
int Sped = rand() % 3 + 1;
createShip0(GridMap, ShipArray, i, j, MxEnd, MxEnd, Sped, 0, n);
}
void createShip0(vector<vector<GridPoint*> > GridMap, vector<vector<Ship*> > ShipArray, int xIn, int yIn, double MaxEnd, double CurEnd, int Speed, int TreasQ, int n)
{
Pirate::createShip(GridMap, ShipArray, xIn, yIn, MaxEnd, CurEnd, Speed, TreasQ);
}
void Pirate::createShip(vector<vector<GridPoint*> > GridMap, vector<vector<Ship*> > ShipArray, int xIn, int yIn, double MaxEnd, double CurEnd, int Speed, int TreasQ)
{
Pirate* obj = new Pirate(xIn, yIn, MaxEnd, CurEnd, Speed, TreasQ);
ShipArray.at(3).push_back(obj);
}
你應該嘗試將此降低到MCVE。提示:它與「2D矢量」無關。 – juanchopanza