我想在列表中迭代成员函数。在此代码示例中,我在for-line中遇到编译器错误:
预期;在它之前,它没有宣布,结束没有宣布。
为什么呢? 该功能甚至没有在代码中使用!
template <class T> bool Settings::saveSimpleList( QString k, const T & l ){
//...
for ( T::ConstIterator it = l.constBegin(), end =l.constEnd(); it != end; ++it )
{
QString itemValue = QVariant( *it ).toString();
//...
}
return true;
}
我明白了,我在模板编程中遗漏了一些东西。 谢谢你的提示!
答案 0 :(得分:7)
这样做:
for (typename T::ConstIterator it = l.constBegin(), end =l.constEnd(); it != end; ++it )
{
QString itemValue = QVariant( *it ).toString();
//...
}
编写T::ConstIterator
时,编译器可以将其解释为“ConstIterator
类型的静态成员T
”或“typedef定义为ConstIterator
的类型”在T
类型中。
如果您的意图是第二个,就像在这里一样,您需要添加typename
来告诉编译器。
答案 1 :(得分:1)
编译器无法知道T :: ConstIterator是一个类型(因为它不知道T将是什么)。您可以通过在其前面添加typename
来表明。