Как получить доступ к элементам динамического массива по ссылке?

165
24 ноября 2021, 12:50

Есть динамический массив объектов, как передать его в функцию и получить доступ к отдельному элементу?

Animal *arr = new Animal[counter];
Foo(*arr);
void Foo (Animal &arr) {
  cout << arr[3].x; // Тут ошибка
}
Answer 1

Вы указали аргументом функции ссылку на Animal, у которого потом пытаетесь вызвать operator[], скорее всего компилятор на это вам и указал в ошибке... Если вы хотите передавать массив, передавайте в функцию, например, указатель+размер массива.

void Foo(Animal* arr, size_t size)
{
    //тут надо бы проверить, что size > 3
    cout << arr[3].x;
}

Хотя, разумеется, вы можете выкрутиться как-то так:

void Foo(Animal& arr)
{
    cout << (&arr)[3].x;
}

Но это уже мягко говоря извращение...

Answer 2
Animal *arr = new Animal[counter];
Foo(arr);
void Foo (Animal *arr) {
 cout << arr[3].x;
}
READ ALSO
Возможно ли переделать файл с расширением .ino( Arduino) и запустить в среде Visual studio?

Возможно ли переделать файл с расширением .ino( Arduino) и запустить в среде Visual studio?

То есть мне надо использовать библиотеку Arduino и запустить код в своей среде

111
Как анимировать элементы на QQuickPaintedItem?

Как анимировать элементы на QQuickPaintedItem?

Хочу чтобы вся анимация и все отображение виджета было в с++ коде Если упрощенното виджет представляет собой 10 окружностей на которых расположены...

240
Получение информации об атрибутах

Получение информации об атрибутах

Можно ли с помощью libclang получить атрибуты члена класса?

86
libclang: парсинг .h файлов

libclang: парсинг .h файлов

libclang по-умолчанию обрабатываетh файлы как файлы содержащие код на C

104