为什么我不能像 std::string::size_type 那样使用 QList::size_type? (模板参数错误)
Why can't I use QList::size_type as I would std::string::size_type? (template parameter error)
在我的 for 循环中声明迭代器时研究无符号整数与有符号整数比较警告时,I read this:
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()
只是 returns 一个普通的旧 int
,我想使用它;但是我读了上面链接的post,这让我不确定。
QList
是一个 class 模板,这意味着您应该在使用时指定模板参数,例如QList<int>
和 QList<int>::size_type
.
顺便说一句:std::string
是 std::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
在我的 for 循环中声明迭代器时研究无符号整数与有符号整数比较警告时,I read this:
Whenever possible, use the exact type you will be comparing against (for example, use
std::string::size_type
when comparing with astd::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()
只是 returns 一个普通的旧 int
,我想使用它;但是我读了上面链接的post,这让我不确定。
QList
是一个 class 模板,这意味着您应该在使用时指定模板参数,例如QList<int>
和 QList<int>::size_type
.
顺便说一句:std::string
是 std::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