Ошибка отладочного утверждения — несовместимы итераторы массива

Я пытаюсь получить пересечение массива и вектора. Я решил сделать их обоими векторами, потому что именно так cplusplus.com приводит пример.

Это сообщение об ошибке, которое я получаю:

введите описание изображения здесь

и вот мой код:

введите описание изображения здесь

getNumbers() функция возвращает массив.

РЕДАКТИРОВАТЬ

Здесь getNumbers() функция — она ​​просто возвращает свойство того же типа возврата:

введите описание изображения здесь

1

Решение

Это утверждение обычно означает, что итераторы, заданные как начало и конец диапазона, ссылаются на разные коллекции.

getNumbers() функция возвращает массив.

Если не getNumbers() возвращает массив по ссылке, а также возвращает ссылку на тот же массив, эта инициализация недействительна:

std::vector<unsigned int> ticketNumbers(getNumbers().begin(), getNumbers().end());

Для того чтобы вышесказанное работало, getNumbers() должен повторно возвращать ссылку на один и тот же массив. Ваш getNumbers возвращает копию, потому что он возвращает массив по значению.

Чтобы исправить эту линию, сначала позвоните getNumbers()сохранить результат во временной переменной tempNumbers, как это

std::array<unsigned int, TICKET_BALL_COUNT> tempNumbers= getNumbers();
std::vector<unsigned int> ticketNumbers(tempNumbers.begin(), tempNumbers.end());

Кроме того, вы можете изменить свой getNumbers() функция для возврата const ссылка, как это:

const std::array<unsigned int, TICKET_BALL_COUNT>& Ticket::getNumbers() const {
return _numbers;
}
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]