Russian Qt Forum
Ноябрь 24, 2024, 04:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QListWidget выдает ошибку линкера в WinXP  (Прочитано 7585 раз)
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, используемый в одном из диалоговых окон. Если его удалить и закомментировать все ссылки на него - ошибки нет. Менял его имя - не помогло.

Что не нравится виндовсу?
« Последнее редактирование: Декабрь 22, 2009, 12:09 от fulkabaster » Записан
Vass
Гость
« Ответ #1 : Декабрь 22, 2009, 12:34 »

А код показать не хотите, на котором падает?  В частности интересует объявление и инициализация QListWidget
Записан
DmP
Гость
« Ответ #2 : Декабрь 22, 2009, 12:36 »

Наверное это
Записан
DmP
Гость
« Ответ #3 : Декабрь 22, 2009, 12:38 »

Или это
Записан
fulkabaster
Гость
« Ответ #4 : Декабрь 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.
Записан
Dendy
Гость
« Ответ #5 : Декабрь 23, 2009, 05:49 »

Просто закомментировал это, и ошибка исчезла.

Отличное решение проблемы! Ждите в гости segmentation fault. Подозреваю нужно просто исправить: return list.toSet<T>()
А вообще признайтесь, у вас и впрямь Visual Studio 6?
Записан
fulkabaster
Гость
« Ответ #6 : Декабрь 23, 2009, 15:08 »

Отличное решение проблемы! Ждите в гости segmentation fault.
Нет, все работает теперь нормально.

Цитировать
Подозреваю нужно просто исправить: return list.toSet<T>()
Неужели разработчики облопошились, и это все еще было незамечено?

Цитировать
А вообще признайтесь, у вас и впрямь Visual Studio 6?
Да.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #7 : Декабрь 23, 2009, 15:30 »

Цитировать
Менял его имя - не помогло.
Цитировать
Есть догадка, что какой-то конфликт имен между этим QT-шным файлом и майкрософтовским файлом от Visual Studio.
Интересная догадка!
В сообщении об ошибке ни намёка о конфликте имён:
Цитировать
'list' : use of class template requires template argument list
Записан

Юра.
Dendy
Гость
« Ответ #8 : Декабрь 23, 2009, 16:16 »

Нет, все работает теперь нормально.

Поправьте правильно, не ленитесь.

Неужели разработчики облопошились, и это все еще было незамечено?

Visual Studio 6 была выброшена из списка компиляторов, а в Qt 4.7 выбросят и Visual Studio 7 (2003).
Записан
fulkabaster
Гость
« Ответ #9 : Декабрь 28, 2009, 10:16 »

Поправьте правильно, не ленитесь.
Исправил, работает, спасибо.

Цитировать
Интересная догадка!
В сообщении об ошибке ни намёка о конфликте имён:
'list' : use of class template requires template argument list
Именно поэтому я и согрешил сначала на конфликт имен - в одном пространстве имен такому классу нужны аргументы, а в другом - нет Улыбающийся Я когда по номеру ошибки искал инфу в инете, обнаружил, что чаще всего она выдается при конфликтах имен, при запарках с пространством имен.
Но вроде все решилось.
Записан
fulkabaster
Гость
« Ответ #10 : Февраль 10, 2010, 13:56 »

Опять похожая проблема, теперь с QVariant.
В конструкторе приложения создается объект QSettings и из системы считываются настройки. В частности, нужно считывать сохраненный цвет в QColor. У объекта QSettings нет метода .toQColor(), но в ассистанте подсказано, как это сделать. Я так и сделал, и в линуксе все пашет:
Код:
  
QSettings *sets = new QSettings(...);
QVariant *variant = new QVariant;
*variant = sets->value("color", Qt::green);
QColor color = variant->value<QColor>();

А компилятор 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 - я в винде только компилю, разрабатываю в линуксе.
Записан
Dendy
Гость
« Ответ #11 : Февраль 22, 2010, 19:38 »

Microsoft Visual C++ 2008 Express Edition или MinGW
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.1 секунд. Запросов: 23.