Почему я не могу использовать QList :: size_type, как я бы использовал std :: string :: size_type? (ошибка параметра шаблона)

При исследовании предупреждения сравнения целых чисел без знака со знаком при объявлении итератора в цикле my, Я читаю это:

По возможности используйте точный тип, с которым вы будете сравнивать (например, используйте std::string::size_type при сравнении с std::stringдлина).

у меня есть QList<T> Я хотел перебрать, объявив итератор, используя вышеуказанный метод:

 for(QList::size_type i = 0; i < uploads.size(); i++)
{
//Do something
}

И это дало мне ошибку компилятора:

error: 'template<class T> class QList' used without template parameters
for(QList::size_type i = 0; i < uploads.size(); i++)

Почему я не могу использовать это так же? Это вызвано мной или фреймворком Qt и его типами? Что является хорошей заменой QList::size_type в этом случае, QList::size() просто возвращает обычный старый int и я хотел использовать это; но я прочитал пост, связанный выше, и это сделало меня неуверенным.

4

Решение

QList является шаблоном класса, это означает, что вы должны указать аргумент шаблона при его использовании, например, QList<int> а также QList<int>::size_type,

КСТАТИ: std::string является экземпляром станд :: basic_string, который является typedef, определяемым как std::basic_string<char>, Так std::string::size_type эквивалентно std::basic_string<char>::size_type по факту.

7

Другие решения

Вы не можете использовать его одинаково, потому что это не одно и то же. std::string на самом деле псевдоним для std::basic_string<char>, поэтому вам не нужно указывать тип шаблона при его использовании.

поскольку Qlist это не псевдоним, а тип шаблона, который вы должны использовать

QList<some_type>::size_type

Одна вещь, которую вы могли бы сделать, это сделать свой собственный псевдоним, как

using QIntList = QList<int>;

И тогда вы можете ise

QIntList::size_type
6

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector