c++;错误:在';之前应为非限定id;[';代币 我试图在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; } } } Board::Board() { 侧面=6; 工件[][]空格=新工件[6][6]; 用于(int row=00;row >(无论那是什么)都是不必要的,因为默认(无参数)构造函数:::分段()/代码>应该将对象初始化为空白状态。要重新初始化,请使用< /P> myPiece = Piece();
以下是eclipse所说的:c++;错误:在';之前应为非限定id;[';代币 我试图在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; } } } Board::Board() { 侧面=6; 工件[][]空格=新工件[6][6]; 用于(int row=00;row >(无论那是什么)都是不必要的,因为默认(无参数)构造函数:::分段()/代码>应该将对象初始化为空白状态。要重新初始化,请使用< /P> myPiece = Piece();,c++,eclipse,C++,Eclipse,以下是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)
..\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&)
。\Board.cpp:在构造函数“Board::Board()”中:
..\Board.cpp:13:7:错误:在“[”标记之前应为非限定id
..\Board.cpp:18:30:错误:在((Board*)this)->Board::spaces[row][column]=(运算符新(8u),(,((blankPiece*))中没有匹配项
..\/Piece.h:14:1:注:候选项为:Piece&Piece::operator=(const-Piece&)
这是非法的:
Piece[][]
C++不将二维数组存储为指针数组,而是存储为一系列平面子数组。因此,必须指定除最后一个边界以外的所有数组
另外,如果数组大小是固定的,new
是不必要的,也是不需要的。只需使用此选项即可
Piece spaces[6][6]; // that's all!
最后,数组中的条目是<代码> Tabe<代码>对象,而不是指针。初始化它们到<代码> BLUCKEATE < /C> >(无论那是什么)都是不必要的,因为默认(无参数)构造函数<代码>:::分段()/代码>应该将对象初始化为空白状态。要重新初始化,请使用< /P>
myPiece = Piece();
如果数组大小可变,最佳做法是使用
std::vector
而不是new[]
typedef vector< vector< Piece > > Board;
Board spaces( 6, vector< Piece >( 6 ) );
typedef向量>板;
板空间(6,向量(6));
这有点难看,您可能会研究类似于boost::multi_array
的替代方案这是非法的:
Piece[][]
C++不将二维数组存储为指针数组,而是存储为一系列平面子数组。因此,必须指定除最后一个边界以外的所有数组
另外,如果数组大小是固定的,new
是不必要的,也是不需要的。只需使用此选项即可
Piece spaces[6][6]; // that's all!
最后,数组中的条目是<代码> Tabe<代码>对象,而不是指针。初始化它们到<代码> BLUCKEATE < /C> >(无论那是什么)都是不必要的,因为默认(无参数)构造函数<代码>:::分段()/代码>应该将对象初始化为空白状态。要重新初始化,请使用< /P>
myPiece = Piece();
如果数组大小可变,最佳做法是使用
std::vector
而不是new[]
typedef vector< vector< Piece > > Board;
Board spaces( 6, vector< Piece >( 6 ) );
typedef向量>板;
板空间(6,向量(6));
这有点难看,您可能会考虑其他选择,如
boost::multi_array
这是一行:Piece[][]spaces=new Piece[6][6];
<>这不是C++如何构造数组的类型名称。
Piece (*spaces)[6] = new Piece[6][6];
这一行:
Piece[][]空格=新的Piece[6][6];
<>这不是C++如何构造数组的类型名称。
Piece (*spaces)[6] = new Piece[6][6];
无法声明具有多个未知维度的数组。请改用指针或
std::vector
此外,您还可以分配保存在局部变量
空格中的内存,该变量一旦退出函数就会消失,它应该是类成员。您不能声明具有超过1个未知维度的数组。请改用指针或std::vector
此外,您可以分配内存,这些内存保存在局部变量空格中,一旦退出函数就会消失,它应该是一个类成员。我认为您无法执行片段[][]
,请尝试:
Piece** spaces = new Piece*[6];
for(int i = 0; i < 6; i++) {
spaces[i] = new Piece[6];
}
工件**空格=新工件*[6];
对于(int i=0;i<6;i++){
空格[i]=新件[6];
}
或者使用。我认为你做不到Piece[][]
,试试:
Piece** spaces = new Piece*[6];
for(int i = 0; i < 6; i++) {
spaces[i] = new Piece[6];
}
工件**空格=新工件*[6];
对于(int i=0;i<6;i++){
空格[i]=新件[6];
}
或者使用。只使用这个
工件空间[6][6]
就用这个
工件空间[6][6]
可能的复制感谢很多,这是有效的,我知道我不应该使用数组,但我仍然不熟悉向量,因为我有点新的C++,我一定会尝试向量替代在这个游戏的副本,以获得良好的把握。我也会检查Boost多阵列未来。一切都很好。再做一次,谢谢,非常感谢!这很有效,我知道我不应该使用数组,但是我对向量还不熟悉,因为我对C++有点陌生,我一定会尝试向量替换在这个游戏的副本中得到很好的把握。rything做得很好,只是需要做一些小的修改并测试游戏。再一次,谢谢!