new
возвращает указатель на первый элемент выделенного массива. Вы пытаетесь присвоить его int
, который не является указателем.
Вы должны присвоить результат выражения new
указателю на int
:
int* mergedNumbers = new int[mergedSize];
или более просто, вы можете позволить компилятору определять тип, так что вам не нужно вводить его дважды:
auto mergedNumbers = new int[mergedSize];
Обратите внимание, однако, что mergedNumbers
является указателем в любом случае и должен бытьиспользуется как таковой (например, с синтаксисом индекса массива).
Не забудьте delete[]
указатель, когда вам больше не нужен выделенный массив, в противном случае вы теряете эту память:
delete[] mergedNumbers;
Однако для временного массива динамического размера нельзя использовать ручную динамическую память, вместо этого следует использовать std::vector<int>
. Использование new
/ delete
для чего-то подобного является плохим стилем, поскольку он подвержен ошибкам, не безопасен для исключений и не следует одной из фундаментальных концепций стиля программирования C ++, известного как Приобретение ресурсов является инициализацией(RAII)
std::vector<int> mergedNumbers(mergedSize);
Используйте это, если можете (требуется #include<vector>
). Если ваш инструктор не допустит этого, это будет очень прискорбно, потому что он научит вас плохому стилю C ++, который не используется на практике.