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"
В чем проблема?
Оператор [] должен вызывается для объекта, а не для указателя на него, иначе вы обращаетесь по сути к массиву из 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];
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Пытаюсь загрузить двоичное дерево, но постоянно появляется ошибкаСохраняю вот так