帮忙解释一个C++问题

来源:百度知道 编辑:UC知道 时间:2024/06/15 13:21:41
#include<iostream>
using namespace std;

class overload // 定义个类
{
enum{i=2,j=3};
int chessBoard[i][j];
public:
overload() // 对数组的赋值
{
//chessBoard[i][j]={0,1,2,3,4,5};
for(int i=0;i<2;i++)
for(int j=0;j<3;j++)
chessBoard[i][j]=i+1+j;

}

int operator() (int x,int y) // 操作符重载
{
return chessBoard[x][y];
}
};

int main()
{
overload shi; // 创建一个对象
cout<<shi(1,1)<<endl; // 调用自定义的操作符
return 0;
}
上面是代码 就是上面对二维数组初始化的时候,我用注释的那个初始化的方法为什么编译器报错,用FOR循环就可以,照理说按注释的那样初始化也行的吧 可是为什么报错那

你明显把赋值和初始化弄混了。

初始化一般是在定义的时候。
比如
int a = 3;
这是初始化。
而赋值是这样的。
int a;
a = 3;
所以,在你的程序里
class overload // 定义个类
{
enum{i=2,j=3};
int chessBoard[i][j]; //这里是定义的位置
......

而你的chessBoard[i][j]={0,1,2,3,4,5}; 明显是错误的。
因为这时i=2,j=3
所以这句等同于chessBoard[2][3]={0,1,2,3,4,5};
你觉得可能没有问题吗?

还有一点要注意的是,在类中,无法初始化一个类的成员变量。
比如
class A
{
int a = 8;
};
这样是不行的。
所以还是保留你原来的赋值方式吧。
或者把它写到构造函数里。