我正在尝试用 C++ 制作一个简单的游戏,我快完成了,但我一直遇到这个错误。我确定这些是语法错误,我只是不确定如何修复它们。
Board::Board()
{
side = 6;
Piece[][] spaces = new Piece[6][6];
for (int row = 00; row < side; ++row)
{
for (int column = 0; column < side; ++column)
{
spaces[row][column] = new blankPiece;
}
}
}
这是 eclipse 的意思:
..\Board.cpp: In constructor 'Board::Board()':
..\Board.cpp:13:7: error: expected unqualified-id before '[' token
..\Board.cpp:18:30: error: no match for 'operator=' in '((Board*)this)->Board::spaces[row][column] = (operator new(8u), (<statement>, ((blankPiece*)<anonymous>)))'
..\/Piece.h:14:1: note: candidate is: Piece& Piece::operator=(const Piece&)
最佳答案
这是非法的:
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
这样的替代方案。
关于C++ 错误 : expected unqualified-id before '[' token,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5575095/