Это незаконно:
Piece[][]
C ++ не хранит двумерный массив в виде массива указателей, а представляет собой плоскую последовательность подмассивов. Поэтому должны быть указаны все, кроме последней границы.
Кроме того, new
не является необходимым и нежелательным, если размер массива фиксирован. Просто используйте это.
Piece spaces[6][6]; // that's all!
Наконец, записи в массиве являются Piece
объектами, а не указателями. Инициализация их blankPiece
(что бы это ни было) должна быть ненужной, поскольку конструктор по умолчанию (без аргументов) Piece::Piece()
должен инициализировать объект в пустое состояние. Для повторной инициализации используйте
myPiece = Piece();
Если размер массива является переменным, рекомендуется использовать std::vector
вместо new[]
. Вот наиболее распространенный подход к двумерному vector
:
typedef vector< vector< Piece > > Board;
Board spaces( 6, vector< Piece >( 6 ) );
Это немного уродливо, и вы можете посмотреть на альтернативы, такие как boost::multi_array
.