C++ 错误 : expected unqualified-id before '[' token

标签 c++ eclipse

我正在尝试用 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/

相关文章:

c# - 将具有未知大小数组的结构从非托管代码传递到托管代码

java - 使用 Maven 生成 Eclipse 项目文件

java - Android+Eclipse+Flixel - 找不到父类(super class)

java - 准备好的语句仅在不调试时抛出异常

c++ - 似乎头文件被忽略/继承不工作

c++ - 使用新的Qt5信号/槽机制连接QTcpSocket::error()时编译错误

c++ - 在内存空间打开文件

c++ - 为 int8_t 和 uint8_t 专门化此模板函数的更好方法是什么?

java - Eclipse远程调试、断点-.java VS .class混淆

java - 获取 'java.lang.UnsatisfiedLinkError' : no lwjgl in java. 库.path