Как написано, вы определяете функцию с именем _matrix, которая возвращает вектор. Поэтому ожидается, что TOTAL_ROWS
будет именем типа, поскольку оно анализируется как тип параметра. Я предполагаю, что вы пытаетесь определить переменную с именем _matrix, которая является вектором.
То, что вы хотите сделать, это оставить конструктор и инициализировать переменную внутри вашего конструктора. Только постоянные интегральные значения могут быть инициализированы в теле класса, по крайней мере, в текущей версии стандарта.
Оставляя неважные части:
Board() : _matrix(TOTAL_ROWS, vector<Cell>(TOTAL_COLUMNS)) { }
private:
vector< vector<Cell> > _matrix;
Обратите внимание, что это всего лишь пример. Предположительно у вас есть файл реализации с фактическим телом для Board()
, и вы должны поместить инициализацию туда, а не прямо в заголовок, иначе вы получите ошибки. Важно то, что вы не должны делать это при первоначальном объявлении _matrix
.
Для вашего нового вопроса extern const unsigned int TOTAL_COLUMNS = 15;
определяет TOTAL_COLUMNS
каждый раз, когда Board.h включается в файл. Постоянные переменные в области именного пространства имеют внутреннюю связь по умолчанию, поэтому, если вы пропустите extern
, все будет в порядке.
Как правило, если переменная не постоянна, вы применяете подход, аналогичный подходу для _matrix
. Вы отключаете инициализацию в заголовке, а затем внутри файла реализации возвращаете его:
board.h:
extern const int TOTAL_COLUMNS;
board.cpp:
extern const int TOTAL_COLUMNS = 15;