Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 错误:在{in c+;+;_C++_Arrays_Class - Fatal编程技术网

C++ 错误:在{in c+;+;

C++ 错误:在{in c+;+;,c++,arrays,class,C++,Arrays,Class,我试图将一维数组初始化为类中的成员变量,但得到了预期的表达式错误 以下是俄罗斯方块.h文件中的声明: private: int* rotate(char piece,int rot); int width; int* heights; char* data[0]; const string blockkeys; int *blocks; }; 这是构造器: Tetris::Tetris(int w):blockkeys("IOJLZST"){

我试图将一维数组初始化为类中的成员变量,但得到了预期的表达式错误

以下是俄罗斯方块.h文件中的声明:

private:
    int* rotate(char piece,int rot);

    int width;
    int* heights;
    char* data[0];
    const string blockkeys;
    int *blocks;
};
这是构造器:

Tetris::Tetris(int w):blockkeys("IOJLZST"){
blocks = new int[7*4*2]={
    0,0,0,1,0,2,0,3,
    0,0,0,1,1,1,1,0,
    0,0,1,0,1,1,1,2,
    0,0,1,0,0,1,0,2,
    0,0,1,0,0,1,-1,1,
    0,0,1,0,1,1,2,1,
    0,0,-1,1,1,1,2,1};
width=w;
heights=new int[width];
char *data[width];
for (unsigned int i=0; i<width; ++i){
    data[i]=new char[0];
    heights[i]=0;
}
}
俄罗斯方块:俄罗斯方块(intw):区块键(“IOJLZST”){ 块=新整数[7*4*2]={ 0,0,0,1,0,2,0,3, 0,0,0,1,1,1,1,0, 0,0,1,0,1,1,1,2, 0,0,1,0,0,1,0,2, 0,0,1,0,0,1,-1,1, 0,0,1,0,1,1,2,1, 0,0,-1,1,1,1,2,1}; 宽度=w; 高度=新整数[宽度]; 字符*数据[宽度];
对于(未签名int i=0;i)您检查了语法吗?恐怕“new int(7×4×2)=任何东西”不是C++中的一个有效的初始化表达式。 此外,长度为零的数组声明无效

操作说明后编辑

尝试将数组声明为静态:

class Tetris {
    ....
    static int blocks[7*4*2];
};


int Tetris::blocks[7*4*2]={
    0,0,0,1,0,2,0,3,
    0,0,0,1,1,1,1,0,
    0,0,1,0,1,1,1,2,
    0,0,1,0,0,1,0,2,
    0,0,1,0,0,1,-1,1,
    0,0,1,0,1,1,2,1,
    0,0,-1,1,1,1,2,1};

然后在
俄罗斯方块
成员函数中使用

块不是零长度数组。@DanG.,但
数据
是。
新整数[7*4*2]
不是左值。为什么要给它赋值?但是
数据
没有引起任何问题,事实上,数据工作得很好,报告的实际错误是什么?有没有什么方法可以实例化这个成员变量,而不必循环并将每个索引分配给我想要的数字。我将其更改为
new int[56]
但它仍然没有work@DanG.问题在于两个
=
符号,而不是multiplication@Angew那么,我如何在一行代码中初始化这个数组呢?我不想遍历所有56项,恐怕不行。您需要遍历整个分配的数组,并分别为每个项分配一个值(除非您之前已经分配并初始化了这样的数组,否则在这种情况下,您可能只是
memmove
内容,但这会带来严重的问题…!)。但是,一旦您有了这样的静态初始值设定项,是什么阻止您分配和使用静态数组?您真的需要将其分配到具有
new
的堆中吗?