Название: QListWidget выдает ошибку линкера в WinXP Отправлено: fulkabaster от Декабрь 22, 2009, 12:06 Делаю проект, в нем задействовано несколько диалоговых окон. Пишу код под линуксом, там все отлично работает. В виндовсе же nmake выдает следующую ошибку
Цитировать ..\QT\4.4.3\include\QtCore/../../src/corelib/tools/qset.h(296) : error C2955: 'list' : use of class template requires template argument list C:\Program Files\Microsoft Visual Studio\VC98\include\list(415) : see declaration of 'list' myform.cpp Generating Code... NMAKE : fatal error U1077: 'cl' : return code '0x2' Stop. NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio\VC98\bin\NMAKE.EXE"' : return code '0x2' Stop. При чем здесь qset.h - непонятно, я оттуда ничего не юзаю. Но методом исключения обнаружил, что виновником является один QListWidget, используемый в одном из диалоговых окон. Если его удалить и закомментировать все ссылки на него - ошибки нет. Менял его имя - не помогло. Что не нравится виндовсу? Название: Re: QListWidget выдает ошибку линкера в WinXP Отправлено: Vass от Декабрь 22, 2009, 12:34 А код показать не хотите, на котором падает? В частности интересует объявление и инициализация QListWidget
Название: Re: QListWidget выдает ошибку линкера в WinXP Отправлено: DmP от Декабрь 22, 2009, 12:36 Наверное это (http://doc.trolltech.com/4.6/compiler-notes.html#visual-studio-windows)
Название: Re: QListWidget выдает ошибку линкера в WinXP Отправлено: DmP от Декабрь 22, 2009, 12:38 Или это (http://doc.trolltech.com/4.6/supported-platforms.html#tier-1-platforms)
Название: Re: QListWidget выдает ошибку линкера в WinXP Отправлено: fulkabaster от Декабрь 22, 2009, 13:05 А код показать не хотите, на котором падает? В частности интересует объявление и инициализация QListWidget Я его вставил в дизайнере, не вручную, как и все остальное. Так что не заботился об инициализации.Проблему решил (временно) так - пошел в тот файл (QT\4.4.3\src\corelib\tools) и в ту строчку (296), которые выдаются в ошибке, и увидел там это: Цитировать template <typename T> QSet<T> QSet<T>::fromList(const QList<T> &list) { return list.toSet(); } Просто закомментировал это, и ошибка исчезла. Но че ему здесь не понравилось - так и не понял. Есть догадка, что какой-то конфликт имен между этим QT-шным файлом и майкрософтовским файлом от Visual Studio. Название: Re: QListWidget выдает ошибку линкера в WinXP Отправлено: Dendy от Декабрь 23, 2009, 05:49 Просто закомментировал это, и ошибка исчезла. Отличное решение проблемы! Ждите в гости segmentation fault. Подозреваю нужно просто исправить: return list.toSet<T>() А вообще признайтесь, у вас и впрямь Visual Studio 6? Название: Re: QListWidget выдает ошибку линкера в WinXP Отправлено: fulkabaster от Декабрь 23, 2009, 15:08 Отличное решение проблемы! Ждите в гости segmentation fault. Нет, все работает теперь нормально.Цитировать Подозреваю нужно просто исправить: return list.toSet<T>() Неужели разработчики облопошились, и это все еще было незамечено?Цитировать А вообще признайтесь, у вас и впрямь Visual Studio 6? Да.Название: Re: QListWidget выдает ошибку линкера в WinXP Отправлено: lit-uriy от Декабрь 23, 2009, 15:30 Цитировать Менял его имя - не помогло. Цитировать Есть догадка, что какой-то конфликт имен между этим QT-шным файлом и майкрософтовским файлом от Visual Studio. Интересная догадка!В сообщении об ошибке ни намёка о конфликте имён: Цитировать 'list' : use of class template requires template argument list Название: Re: QListWidget выдает ошибку линкера в WinXP Отправлено: Dendy от Декабрь 23, 2009, 16:16 Нет, все работает теперь нормально. Поправьте правильно, не ленитесь. Неужели разработчики облопошились, и это все еще было незамечено? Visual Studio 6 была выброшена из списка компиляторов, а в Qt 4.7 выбросят и Visual Studio 7 (2003). Название: Re: QListWidget выдает ошибку линкера в WinXP Отправлено: fulkabaster от Декабрь 28, 2009, 10:16 Поправьте правильно, не ленитесь. Исправил, работает, спасибо.Цитировать Интересная догадка! Именно поэтому я и согрешил сначала на конфликт имен - в одном пространстве имен такому классу нужны аргументы, а в другом - нет :) Я когда по номеру ошибки искал инфу в инете, обнаружил, что чаще всего она выдается при конфликтах имен, при запарках с пространством имен.В сообщении об ошибке ни намёка о конфликте имён: 'list' : use of class template requires template argument list Но вроде все решилось. Название: Re: QListWidget выдает ошибку линкера в WinXP Отправлено: fulkabaster от Февраль 10, 2010, 13:56 Опять похожая проблема, теперь с QVariant.
В конструкторе приложения создается объект QSettings и из системы считываются настройки. В частности, нужно считывать сохраненный цвет в QColor. У объекта QSettings нет метода .toQColor(), но в ассистанте подсказано, как это сделать. Я так и сделал, и в линуксе все пашет: Код:
А компилятор MS Visual C++ заругался: Цитировать .\mainwindow.cpp(32) : error C2039: 'value' : is not a member of 'QVariant' ..\QT\4.4.3\include\QtCore/../../src/corelib/kernel/qvariant.h(95) : see declaration of 'QVariant' .\mainwindow.cpp(32) : error C2059: syntax error : ')' NMAKE : fatal error U1077: 'cl' : return code '0x2' Stop. Если источником таких проблем является это: Цитировать Visual Studio 6 была выброшена из списка компиляторов, а в Qt 4.7 выбросят и Visual Studio 7 (2003). то какой компилятор посоветуете для WinXP? Можно самый простой, но нормально работающий с QT - я в винде только компилю, разрабатываю в линуксе.Название: Re: QListWidget выдает ошибку линкера в WinXP Отправлено: Dendy от Февраль 22, 2010, 19:38 Microsoft Visual C++ 2008 Express Edition или MinGW
|