Что-то не могу понять.
Есть список объектов. Работа с этим списком происходит по ссылке:
// Перечень файлов и их свойств
QList< Attach > *attachTable;
То есть, имеем не список ссылок на объекты, а обычный список объектов. Только работа с этим списком идет через ссылку (я пробовал и простой список делать, а не ссылку, результат тот же, только еще errorы вылазят, поэтому пока так как есть).
Проблема в том, что я могу вызвать метод объекта Attach, но только тот, который помечен как константный. То есть, у Attach есть два метода:
QString getId() const;
void pushFatDataToDisk();
Нормально компилируется вызов:
attachTable->at(i).getId()
И не компилируется вызов:
attachTable->at(i).pushFatDataToDisk()
Ошибка следующая:
../mytetra_develop/src/models/attachTable/AttachTableData.cpp: In member function 'void AttachTableData::switchAllAttachToLite()':
../mytetra_develop/src/models/attachTable/AttachTableData.cpp:115:42: error: passing 'const Attach' as 'this' argument of 'void Attach::pushFatDataToDisk()' discards qualifiers [-fpermissive]
attachTable->at(i).pushFatDataToDisk();
Обычно похожие ошибки возникают если из константного метода вызывать неконстантный метод. Но тут ситуация вообще другая - метод, в котором происходит вызов - неконстантный. Выше по стеку тоже неконстантные методы. Поэтому из него можно вызывать любые методы. Но почему-то имеем ошибку.
Я попробовал вызвать неконстантный метод setupDataFromDom() у объекта, созданного напрямую. И он нормально вызывается. В коде есть такие строчки, которые нормально компилируются:
// Создается объект аттача
Attach attach(this);
attach.setupDataFromDom(currentFile);
Я пробовал получить доступ к объекту в списке не через at(i), а по операнду [ i ]. И в принципе, проблема была решена:
(*attachTable)[i].pushFatDataToDisk();
Но меня не покидает непонимание: почему через at(i) вызываются константные методы, а не константные вызваться не могут?
Код проекта:
https://github.com/xintrea/mytetra_dev/commit/f2a9cbd30b85d70208b6ad425abc3fd...