这是一个棋盘类。 我该如何解决编译器给出的错误?感谢
错误是"在' ['之前预期的不合格身份令牌|"
#ifndef SCACCHIERA_H_INCLUDED
#define SCACCHIERA_H_INCLUDED
class Chess {
public:
private:
unsigned int rows = 0;
unsigned int columns = 0;
int[][]mat = new int[rows][columns];
};
#endif // SCACCHIERA_H_INCLUDED
在用户的帮助下,我将代码更改为
class Chess {
public:
Chess(unsigned int a):mat(mat[a][a]){};
private:
int mat[0][0];
};
但是现在编译器给了我错误 分配' int'中的不兼容类型到' int [0] [0]' |
答案 0 :(得分:2)
int[][]mat = new int[rows][columns];
应该是
int mat[rows][columns];
如果rows
和columns
是常量。
或者
class Chess {
public:
Chess(int r, int c) {
rows = r;
columns = c;
mat = new int*[rows];
for(int i = 0; i < rows; ++i)
mat[i] = new int[columns];
}
private:
unsigned int rows = 0;
unsigned int columns = 0;
int** mat = nullptr;
};
答案 1 :(得分:0)
问题出在这里。
int [] [] mat = new int [rows] [columns];
首先将其公之于众。如果您需要它是私有的,请确保您提供访问此私有阵列的功能。 您可以简单地将其声明为
int mat[row][column];
如果你想清楚地了解你在做什么,它看起来像这样。您正在声明一个二维数组。上面的简单行在编译器中有点像这样处理。宣言将是:
int **mat = new *[columns];
for(int i = 0; i < columns; ++i)
ary[columns] = new int[row];
这将创建列*行的2D数组。即如果有2列和5行。你会得到这样的东西:
[+] - &gt; [*****] [+] - &gt; [*****]
其中+是列并保存行数组的地址。