2011-04-07 71 views
1

我想在C++中做一个简单的游戏,我几乎完成,但我一直在遇到这个错误。我确定这些是语法错误,我只是不确定如何解决它们。C++错误:期待'['令牌不合格ID'''令牌

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; 
     } 
    } 
} 

这里是蚀是说:

..\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&) 
+1

的可能重复[\ [C++ \]我如何使用新的声明二维数组?](http://stackoverflow.com/questions/936687/c-how- do-i-declare-a-2d-array-using-new) – GWW 2011-04-07 01:59:56

回答

4

这是非法的:

Piece[][] 

C++不存储2维数组作为指针数组,但而是一系列平坦的子阵列。因此,除了最后的界限外,都必须指定。

另外,如果数组大小固定,则不需要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替代品。

+0

非常感谢!工作,我知道我不应该使用数组,但我仍然不熟悉矢量,因为我对C++有点新,我一定会尝试在这个游戏的副本中的矢量替代,以获得良好的把握。我也会检查出未来提升multi_array。一切都很成功,只需要做一些小修改并测试游戏。再一次,谢谢! – 2011-04-07 02:25:58

1

这是这一行:Piece[][] spaces = new Piece[6][6];

这不是多么的C++结构类型的名称数组。请尝试:

Piece (*spaces)[6] = new Piece[6][6]; 
0

您无法声明多于1个未知维的数组。改为使用指针或std::vector

此外,你分配内存,你保留在一个局部变量spaces消失一旦你不在函数中,它应该是一个类成员。

1

我不认为你可以做Piece[][],尝试:

Piece** spaces = new Piece*[6]; 
for(int i = 0; i < 6; i++) { 
    spaces[i] = new Piece[6]; 
} 

或者使用boost::multi_array

1

只需使用这个

Piece spaces[6][6];

相关问题