簡體   English   中英

調整對象向量大小時出錯

[英]Error when resizing vector of object

我正在嘗試創建對象的向量,但是有一些問題。 我無法將vector上的19個對象push_back回退,因為它會顯示bad_alloc錯誤消息。

我嘗試使用resize()或reserve()調整向量的大小,但仍然沒有任何效果。

對於resize(),我讀到您需要提供2個參數來調整向量的大小,但是仍然沒有。 當我嘗試不帶push_back的情況下使用它時,會顯示錯誤:')'標記之前的預期主表達式。

#define N 10 //ari8mos seirwn tou xarth
#define M 10 //ari8mos sthlwn tou xarth
#define TREAS 100//posothta 8usaurou
#define PORTS 100//ari8mos limaniwn
extern void ships(map (&myArray)[N][M], vector<ship> &myShips);

void ships(map (&myArray)[N][M], vector<ship> &myShips)
{
  int i,j,y;

  srand ( time(NULL) );
  //myShips.reserve(21);
  //myShips.resize(20,ship);
  cout << myShips.capacity() << endl;
  int x=0;
  for( i = 0; i <19 ; i++){
      myShips.push_back(pirate(rand() % N,rand() % M,100,100,100,1,'@',myArray,myShips));
  }
  for( i=0;i<myShips.size();i++ ){
      cout << myShips[i].get_symbol() << " ";
  }

}

以下是其余代碼可幫助您理解:

  class ship
{
   protected:
    int i,j,x2,y2;
    //vector<vector<map> > myArray;
    //ship (&myShips)[N][M];
    int x;
    int y;
    map (myArray)[N][M];
    vector<ship> myShips;
    int max_resistance;
    int current_resistance;
    int speed;
    int reserve_treasure;
    char symbol;

   public:
    ship(int x_, int y_, int max_res, int cur_res, int res_treas, int sp, char sy, map (&myArr)[N]     [M], vector<ship> &Ship)
        :x(x_)
        ,y(y_)
        ,max_resistance(max_res)
        ,current_resistance(cur_res)
        ,reserve_treasure(res_treas)
        ,speed(sp)
        ,symbol(sy)
        ,myArray(myArr)
        ,myShips(Ship)
    {cout << "eimai o 'ship' 2" << endl; }
     ~ship() {}
    int get_x();
    int get_y();
    float get_max_resistance();
    float get_current_resistance();
    int get_speed();
    float get_reserve_treasure();
    char get_symbol();
    void set_x(int pos_x);
    void set_y(int pos_y);
    void set_max_resistance(float maxres);
    void set_current_resistance(float curres);
    void set_speed(int sp);
    void set_reserve_treasure(float restrea);
    void set_symbol(char sy);

    void movement();
    void operation();
};
int ship::get_x(){
    return x;
}
int ship::get_y(){
    return y;
}
float  ship::get_max_resistance(){
    return  max_resistance;
}
float ship::get_current_resistance(){
    return current_resistance;
}
int ship::get_speed(){
    return speed;
}
float ship::get_reserve_treasure(){
    return reserve_treasure;
}
char ship::get_symbol(){
    return symbol;
}

void ship::set_x(int pos_x){
    x = pos_x;
}
void ship::set_y(int pos_y){
    y = pos_y;
}
void ship::set_max_resistance(float maxres){
    max_resistance = maxres;
}
void ship::set_speed(int sp){
    speed = sp;
}
void ship::set_current_resistance(float curres){
    current_resistance = curres;
}
void ship::set_reserve_treasure(float restrea){
    reserve_treasure = restrea;
}
void ship::set_symbol(char sy){
    symbol = sy;
}

class pirate : public ship
{

   public:

    pirate(int posx, int posy, float mr, float cr, float rt, int spe, char sym, map (&Array)[N] [M],vector<ship> &Ship ):ship(posx,posy,mr,cr,rt,spe,sym,Array,Ship){
cout << "eimai o 'pirate' 1" << endl;


    // ship(90,90,1,50,'@',Array,Ship) {//vector<vector<map> > Array, vector<vector<ship> > Ship)     {}
};

希望你能幫忙

通過這段代碼,您是否為map創建了自定義定義? 否則,如果嘗試創建Map對象的[N] [M]數組,則缺少map的類型聲明。 例如map<int,string>如果您試圖將map用作多維數組,則這不是std :: map的目的。 Map是用於存儲鍵/值對的通用容器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM