Ссылка на необъектный массив из класса

0

Пусть говорят, что моя функция имела массив, переданный в нем следующим образом:

int someFunction ( SomeClass * const * array, int arr_size ) { }

Это массив некоторых структур:

struct SomeStruct {
   int value;
   int value2;
};

То, что я пытаюсь достичь, - это сделать ссылку внутри объекта, объявленного в этой функции:

int someFunction ( SomeStruct * const * array, int arr_size )
{
   NewClass newclass (array, arr_size);
}

мой конструктор будет выглядеть так:

Newclass::NewClass( SomeStruct * const * array, int arr_size )
{
   SomeStruct ** myReference = new SomeStruct * [arr_size];
   for (int i = 0; i < arr_size; ++i)
   {
      myReference[i] = array[i];
   }

   myReference[0] -> value = 10;
}

Теперь, если я хочу распечатать значение первого элемента в массиве, я получаю только нуль.

int someFunction ( SomeStruct * const * array, int arr_size )
{
   NewClass newclass (array, arr_size);

   cout << array[0] -> value << endl;
}

Вывод:

0

Можно ли даже ссылаться на не-объект из класса? Как получить массив ссылок для изменения исходного массива? У меня был массив ссылок в этой функции как не объект раньше, и все работало нормально. И нет, я не могу просто оставить его там.

  • 0
    Нет SSCCE , нет конкретного вопроса ( «что я делаю неправильно» слишком широко / неясно). Редактировать!!
  • 0
    @g-makulik g-makulik Не знаю, что неясно в моем вопросе. Отредактировал это все же.
Показать ещё 9 комментариев
Теги:
reference

1 ответ

0

Когда вы выделяете указатели на структуру в Newclass::NewClass(), вы забываете фактически инициализировать эти указатели, Newclass::NewClass() на фактические структуры.

Тебе нужно:

Newclass::NewClass(SomeStruct* const* array, int arr_size)
{
    SomeStruct** myReference = new SomeStruct*[arr_size];
    for (int i = 0; i < arr_size; ++i) {
        myReference[i] = array[i];
    }
    myReference[0]->value = 10;
}

Хотя я должен сказать, что я запутался во всей косвенности указателя и почему он вам нужен. И вы тоже теряете память; вы никогда не delete[] myReference.

И вы должны использовать std::vector вместо того, чтобы делать все это управление памятью вручную.

  • 0
    myReference[i] = &array[i]; невозможно из-за преобразования из const в не-const. Вне класса это работает даже без & .
  • 0
    Затем объявите myReference соответствующим образом. Ответ на самом деле показывает реальную проблему, с которой вы столкнулись.
Показать ещё 1 комментарий

Ещё вопросы

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