Инициализировать элемент многомерного массива

0

У меня проблема с инициализацией элемента многомерного массива.

Вот мой код:

    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: выражение должно иметь тип указателя на объект

  • 2
    A нужен operator[] если вы хотите использовать его таким образом.
Теги:
arrays
multidimensional-array

1 ответ

0
Лучший ответ

Вы пытаетесь применить [] к классу A, C++ знает, как использовать оператор [] на массивах. Чтобы использовать их для A, вы должны сказать, как [] работает для A, поэтому внутри вашего определения класса вы должны поставить:

int *operator[](int x){
    return &e[x*row];
}

Он в основном получает номер, который вы поставили между скобками, и возвращает соответствующую строку (массив), так что вы можете применить [] снова легко, например, например:

c[0] возвращает первую строку

c[0][1] получить доступ ко второму элементу первой строки

Ещё вопросы

Сообщество Overcoder
Наверх
Меню