Lazy_Kent пишет:Возникла проблема с компиляцией MyTetra 1.28 для openSUSE 12.1.
Полный лог здесь: https://build.opensuse.org/package/rawl … SE_Factory
Посмотрите, пожалуйста.
Версия openSUSE тестовая — новый компилятор и другие компоненты. В текущих всё компилируется нормально.
Хм, ситуация такая. Вот сами ошибки:
src/knowtreemodel.cpp: In member function 'void KnowTreeModel::parse_tree_to_dom(QDomElement*, TreeItem*)':
src/knowtreemodel.cpp:174:51: error: taking address of temporary [-fpermissive]
make: *** [build/knowtreemodel.o] Error 1
make: *** Waiting for unfinished jobs....
src/recordtabledata.cpp: In member function 'void RecordTableData::setup_data_from_dom(QDomElement*)':
src/recordtabledata.cpp:170:58: error: taking address of temporary [-fpermissive]
src/recordtabledata.cpp:202:50: error: taking address of temporary [-fpermissive]
make: *** [build/recordtabledata.o] Error 1
В других компиляторах на этих местах выдаются предупреждения с аналогичным текстом, а не ошибки.
Первое место - это вызов рекурсивной функции для пробега по дереву, с передачей адреса стартового узла. Алгоритм сделан так, что адрес не портится, поэтому такой вызов правомерен:
// Рекурсивная обработка
1: parse_tree_to_dom(&(xmlData->lastChildElement()), currItem->child(i) );
А новый компилятор считает это ошибкой. Кстати, какая версия компилятора?
Хотя щас посмотрю... Видимо не в рекурсии дело, а в процедуре взятия адреса. Потому что два других места - это не рекурсивный вызов, а просто запоминание указателя на Dom-элемент:
// Определяется указатель на первый элемент с записью
2: QDomElement *currentRec=&(domModel->firstChildElement());
...
3: currentRec=&(currentRec->nextSiblingElement());
Правда, тут после запоминания ячейка с указателем перезаписывается новым значением (3-е место).
Пока не знаю, что это такое. В новой версии я попробую упразднить эти предупреждения, возможно тогда и ошибки не будут вылазить.