Как уже упоминалось, тип этих объектов dto_s*
(или dtos*
, вы использовали два разных написания). В коде инициализации вы смешиваете std::array
с массивами в стиле C ([nDelta]
). Если вам нужен массив указателей, используйте
std::array<dto_s*,nDelta> deltafunction;
(при условии, что nDelta
- это ваше необходимое количество указателей). Если вам нужен массив массивов указателей (т. Е. Массив для каждого объекта в Q
, как предполагает ваш код), вам не следует смешивать эти два типа массивов, а использовать
std::array<std::array<dto_s*, nDelta>, nQ> deltafunction
Но, пожалуйста, будьте предельно осторожныс указателями на члены массива. Если вы скопируете оба массива, элементы копии Q
будут на новых позициях, но указатели в копии deltafunction
будут по-прежнему указывать на элементы Q
. Здесь есть высокий риск ошибок. Я советую вам не использовать указатели для идентификации элементов Q
, а вместо этого ссылаться на них по индексу в Q
.
Особенно, если вы в какой-то момент измените свой код с std::array
на std::vector
, это рискованно, поскольку std::vector
можно перераспределить (другими словами, элементы можно переместить на новые позиции) просто, еслиВы добавляете новый элемент.