Chessboard Class给我错误

时间:2015-04-22 17:23:36

标签: c++

这是一个棋盘类。 我该如何解决编译器给出的错误?感谢

错误是"在' ['之前预期的不合格身份令牌|"

#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]' |

2 个答案:

答案 0 :(得分:2)

int[][]mat = new int[rows][columns];

应该是

int mat[rows][columns];

如果rowscolumns是常量。 或者

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; [*****]

其中+是列并保存行数组的地址。