Создание 2-мерного вектора в классе C ++ - PullRequest
7 голосов
/ 23 апреля 2011

Мне нужно создать вектор векторов, полный целых чисел.Тем не менее, я постоянно получаю ошибки:

ошибка: ожидаемый идентификатор до числовой константы ошибка: ожидаемый ',' или '...' до числовой константы

using namespace std;

class Grid {
  public:

  Grid();

  void display_grid();
  void output_grid();

  private:

  vector<int> row(5, 0);
  vector<vector<int> > puzzle(9, row);
  int rows_;
  int columns_;

};

Ответы [ 5 ]

2 голосов
/ 23 апреля 2011

Определения класса C ++ ограничены тем, что вы не можете инициализировать элементы в строке, где вы их объявляете. Обидно, но в какой-то степени это исправлено в C ++ 0x.

В любом случае, вы можете предоставить параметры конструктора с синтаксисом ctor-initializer. Возможно, вы не видели этого раньше, но:

struct T {
   T() : x(42) {
      // ...
   }

   int x;
};

- это то, как вы инициализируете участника, когда вы могли ранее (и потерпели неудачу) с int x = 42;.

Итак:

class Grid {
  public:

  Grid();

  void display_grid();
  void output_grid();

  private:

  vector<int> row;
  vector<vector<int> > puzzle;
  int rows_;
  int columns_;
};

Grid::Grid()
  : row(5, 0)
  , puzzle(9, row)
{
  // ...
};

Надеюсь, это поможет.

2 голосов
/ 23 апреля 2011

Вы не можете инициализировать переменные-члены в точке, где вы их объявляете. Для этого используйте список инициализации в конструкторе:

Grid::Grid()
  : row(5,0), puzzle(9, row),
    rows_(5), columns_(9)
{
}
0 голосов
/ 23 апреля 2011

Вы должны инициализировать члены в конструкторе класса, а не в объявлении. Следующее, похоже, ни в коем случае не правильно:

vector<int> row(5, 0);
vector<vector<int> > puzzle(9, row);

Если row и puzzle являются функциями - параметры должны быть типов. Если они являются переменными-членами - инициализируйте их в конструкторе класса.

0 голосов
/ 23 апреля 2011

Вы не можете инициализировать изменяемые члены как часть самого определения класса. Вместо этого do назначьте его в конструкторе.

// ....
Grid()
{
     row.resize(5,0) ;
     puzzle.resize(9,row) ;
}
private:
   vector<int> row;
   vector<vector<int> > puzzle ;
// ..
0 голосов
/ 23 апреля 2011

Вы не можете инициализировать член в объявлении класса, если это не const static, потому что в C ++ при объявлении класса код не запускается и не генерируется.Вы должны будете инициализировать их в своем конструкторе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...