繁体   English   中英

为什么我不能使用QList :: size_type,因为我会使用std :: string :: size_type? (模板参数错误)

[英]Why can't I use QList::size_type as I would std::string::size_type? (template parameter error)

在我的for循环中声明迭代器时研究无符号与有符号整数比较警告时, 我读到了这个

尽可能使用您将要比较的确切类型(例如,在与std::string的长度进行比较时使用std::string::size_type )。

我有一个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 ,我想使用它; 但我读了上面链接的帖子,这让我不确定。

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

你不能以同样的方式使用它,因为它们不是同一个东西。 std::string实际上是std::basic_string<char>的别名,这就是为什么在使用它时不必指定模板类型的原因。

由于Qlist不是别名,而且是您必须使用的模板类型

QList<some_type>::size_type

你可以做的一件事就是制作自己的别名

using QIntList = QList<int>;

然后你就可以了

QIntList::size_type

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM