(Отказ от ответственности: я удалил тег Qt на случай, если проблема в моем синтаксисе / понимании ссылок, задействованных здесь)
У меня есть foreach
петля с объектом Member
. Когда я перебираю список и пытаюсь получить доступ к полю участника, отладчик останавливается, и я получаю сообщение:
Stopped: 'signal-received'
-
Ошибка подтверждения:
inline QString::QString(const QString &other) : d(other.d)
{ Q_ASSERT(&other != this); d->ref.ref(); }
Я проверил, является ли член NULL, и это не так. Я попытался заново обработать код, но мне не удается выполнить этот простой вызов.
Я кое-что упустил. MemberList
- это одноэлементный файл (определенно инициализированный и возвращающий действительный указатель), который создается при запуске приложения и заполняет MemberList членами из файла. Когда это создано, определенно есть значения, поскольку я печатаю их в qDebug()
. Эта страница буквально следующая страница. Я не уверен, как уничтожить элементы списка.
Код выглядит следующим образом:
int i = 0;
QList<Member*> members = ml->getMembers();
foreach (Member* mem, members)
{
QString memID = mem->getMemberID(); // Crash happens here
QListWidgetItem *lstItem = new QListWidgetItem(memID, lsvMembers);
lsvMembers->insertItem(i, lstItem);
i++;
}
Классы Member получают следующим образом:
QString getMemberID() const;
и фактическая функция:
QString Member::getMemberID() const
{
return MemberID;
}
Переменная ml
получается следующим образом:
QList<Member*> MemberList::getMembers()
{
return MemberList::getInstance()->memberList;
}
Где memberList
- закрытая переменная.
Окончательный ответ:
Я решил полностью переделать синглтон и обнаружил, что не создаю экземпляр нового члена, а снова и снова использую предыдущий объект. Это вызвало двойную ссылку. Выбери вот указатели для тебя. Отдельное спасибо Troubadour за усилия!