我在初始化多维数组的元素时遇到了问题。
这是我的代码:
class A{
int *const e;
const int row, column;
public:
A::A(int r, int c) : row(r), column(c), e(new int[r*c])
{
for (int i = 0; i < r*c; i++)
{
e[i] = 0;
}
}
A(const A &matrix) : row(matrix.row), column(matrix.column) ,e(new int[matrix.row*matrix.column])
{
for (int i = 0; i < matrix.row*matrix.column; i++)
{
e[i] = matrix.e[i];
}
}
virtual ~A() //destructing a A
{
delete[] e;
}
};
但是当我尝试初始化多维数组的元素时,我遇到了错误:
int main(int argc, char* argv[])
{
A c(2, 5);
c[0][0] = 1;
A a(c);
return 0;
}
1智能感知:没有运算符“[]”匹配这些操作数操作数类型是:MAT [int]
编辑: 根据评论,我尝试编写operator []
virtual int *const operator[ ](int r)
{
return e[r][0];
}
它应该获得r行的第一个元素。但我有一个错误:
1 IntelliSense:表达式必须具有指针对象类型
答案 0 :(得分:0)
您尝试将[]
应用于A类,C ++只知道如何在数组上使用运算符[]
。为了将它们用于A,你必须告诉[]
如何适用于A,所以在你的类定义中你应该放:
int *operator[](int x){
return &e[x*row];
}
它基本上接收你在括号之间放置的数字,并返回相应的行(数组),这样你就可以轻松地再次应用[]
,例如:
c[0]
返回第一行
c[0][1]
访问第一行的第二个元素