2017-06-22 34 views
4

雖然聲明迭代器時,研究一個無符號與符號的整數比較警告我的for循環,I read this爲什麼我不能像std :: string :: size_type那樣使用QList :: size_type? (模板參數錯誤)

Whenever possible, use the exact type you will be comparing against (for example, use std::string::size_type when comparing with a std::string 's length).

我有一個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,我想用它;但是我讀了上面鏈接的帖子,這讓我不確定。

+0

或者,你有任何改變使用'自動'? –

+0

@appleapple如何在這裏使用'auto'? 'auto i = 0'似乎不對。 – songyuanyao

+1

@songyuanyao對不起,你說得對。也許是一個基於'for(auto&x:uploads)'的範圍? –

回答

7

QList是一個類模板,這意味着您應該在使用時指定模板參數,例如, QList<int>QList<int>::size_type

BTW:std::stringstd::basic_string的實例,其爲定義爲std::basic_string<char>的typedef。所以std::string::size_type實際上相當於std::basic_string<char>::size_type

6

你不能以相同的方式使用它,因爲它們不是同一個東西。 A std::string實際上是std::basic_string<char>的別名,這就是爲什麼您在使用它時不必指定模板類型的原因。

由於Qlist不是別名,是一個模板類型,你必須使用

QList<some_type>::size_type 

有一件事你可以做的是讓自己的別名,像

using QIntList = QList<int>; 

然後你就可以ISE

QIntList::size_type 
相關問題