Я вижу две проблемы с кодом.
a) myModel->getList()
возвращает копию вашего QList, объявленного примерно так:
QList<T*> YourModel::getList()
на самом деле вы должны получить нарушение прав доступа. Но я не знаю, так ли это.
б) Если вы полагаетесь только на то, что Visual Studio говорит об этом, забудьте об этом, это неправильно. Он просто не может справиться с итератором. Несмотря на то, что итератор говорит, что его (ошибка) 0 как int, он все равно даст вам правильные данные, если разыменоваться.
Если ни один из вышеперечисленных случаев не подходит, укажите, что на самом деле идет не так, пропускается ли цикл for? Если это так, я отредактирую свой ответ соответственно.
С наилучшими пожеланиями
D
EDIT
Причина, по которой он отлично работает с временным объектом List, заключается в следующем:
В тот момент, когда вы создаете итератор с методом begin()
списка, список отсоединяет свои личные данные (неявное совместное использование), что означает, что он создает глубокую копию себя, потому что вы можете изменить данные с помощью этого итератора. Без временного объекта myModel->getList()
создает временный объект, который сразу после создания итератора уничтожается. С этого момента итератор указывает на никуда. Вы можете попробовать использовать const iterator
, этот должен работать без отсоединения личных данных, следовательно, без проблем.
Другой подход - заставить вашу модель возвращать список в виде константной ссылки или указателя.
Другой способ - отказаться от итераторов и напрямую использовать метод списка at()
. На мой взгляд, делает код более читабельным.