我真的在互联网上搜索过,无法找到解决问题的方法,所以这就是我的问题:
我创建了一个名为" Gridpoint"表示2d地图的每个点,然后是Gridpoint *类型的2d矢量来存储和打印整个地图(n ^ 2个Gridpoint对象)
另外,我有一个名为" Ship" (通常包含船只)和6个子类,用于各种类型的船舶,具有关于它们的额外功能(例如" Pirate")。
所以,我想创建一个空的2d矢量,类型为Ship *,有6行,每行存储由每个子类创建的对象。 (例如,第4行 - >所有海盗船只。)
但是,虽然所有对象(来自Ship子类)都是成功创建的,但是没有任何内容存储在向量中并保持为空。
我应该怎样做才能成功地将每个对象推送到正确的行,即它创建的那一刻?
以下是"参与"的所有功能的简化版本。在向量和对象的创建和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);
}
答案 0 :(得分:0)
你的createShip0
函数按值获取所有参数,这意味着它们是函数体中的本地副本,在调用者端看不到。你正在做相同的事情:
void foo(int n) { n += 42; }
然后
int i = 0;
foo(i);
stc::cout << i << std::endl; // Output: 0
并期望i
增加42
。如果您希望在调用方修改函数的参数,则需要通过 reference 传递它们:
void foo(int& n) { n += 42; }
// ^