Не могу получить значение из шаблонного массива

278
21 июня 2017, 01:22
template <typename El> class MyArray
{
    //...
    El & MyArray<El>::operator[](int i)
    {
        return this->internal_array[i];
    }
}

В мэйне я его объявляю как MyArray *a = new MyArray();Но при попытке присвоить по индексу (int b = a[0]) получаю ошибку

E0413 не существует подходящей функции преобразования из "MyArray" в "int"

В чем проблема?

Answer 1

Оператор [] должен вызывается для объекта, а не для указателя на него, иначе вы обращаетесь по сути к массиву из MyArray<int>. Т.е. вам либо нужно создавать локальный объект (без new), либо получать ссылку на него:

MyArray<int> array1; // Локальный объект
int r1 = array1[1];
MyArray<int>* array2_ptr = new MyArray<int>; // Динамический объект
int r2 = (*array2_ptr)[1];
MyArray<int>& array2_ref = *array2_ptr;
r2 = array2_ref[i];
delete array2_ptr;

Если вы хотите выделять объекты в динамической памяти, лучше использовать умные указатели:

std::unique_ptr<MyArray<int>> array3_ptr = new MyArray<int>; // Удаляется автоматически
int r3 = (*array3_ptr)[1];
READ ALSO
Сжатие методом Хаффмана

Сжатие методом Хаффмана

Пытаюсь загрузить двоичное дерево, но постоянно появляется ошибкаСохраняю вот так

377
Настроить &ldquo;стрелки&rdquo; в ncurses

Настроить “стрелки” в ncurses

Всем приветДелаю текстовый редактор используя односвязный список

268
Частичная специализация C++

Частичная специализация C++

Почему этот пример считается частичной специализацией:

226