У меня проблема с инициализацией элемента многомерного массива.
Вот мой код:
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 IntelliSense: оператор "[]" не соответствует этим типам операндов: MAT [int]
Изменение: Согласно комментариям, я пытаюсь написать оператор []
virtual int *const operator[ ](int r)
{
return e[r][0];
}
Он должен получить первый элемент строки r. Но у меня есть ошибка:
1 IntelliSense: выражение должно иметь тип указателя на объект
Вы пытаетесь применить []
к классу A, C++ знает, как использовать оператор []
на массивах. Чтобы использовать их для A, вы должны сказать, как []
работает для A, поэтому внутри вашего определения класса вы должны поставить:
int *operator[](int x){
return &e[x*row];
}
Он в основном получает номер, который вы поставили между скобками, и возвращает соответствующую строку (массив), так что вы можете применить []
снова легко, например, например:
c[0]
возвращает первую строку
c[0][1]
получить доступ ко второму элементу первой строки
A
нуженoperator[]
если вы хотите использовать его таким образом.