我有一个非常特别的场景,我正在尝试为“列表”添加功能......
#include <list>
template <typename T>
class ShortList : public std::list<T> {
private:
unsigned short max_items;
public:
// Getter and setter methods
unsigned short getMaxItems (void) {
return this.max_items;
}
void setMaxItems (unsigned short max_items) {
this.max_items = max_items;
return;
}
// Work methods
void insertItemSorted (T item) {
std::list<T>::iterator i, e = this.short_list.end();
// Insertion sort O(n*max_items)
for ( i = this.short_list.begin() ; i != e ; ++i ) {
// Insert if smaller
if ( item.getDiff() < (*i).getDiff() ) {
this.short_list.insert(i, item);
// Restrict list size to max items
if ( this.short_list.size() > this.max_items ) {
this.short_list.erase(this.short_list.end());
}
}
}
return;
}
}
我无法理解我在这里做错了什么。这是我的编译错误......
ShortList.cpp: In member function 'int ShortList<T>::insertItemSorted(T)':
ShortList.cpp:21: error: expected `;' before 'i'
ShortList.cpp:24: error: 'i' was not declared in this scope
ShortList.cpp:24: error: 'e' was not declared in this scope
ShortList.cpp: At global scope:
ShortList.cpp:35: error: expected unqualified-id at end of input
我觉得好像我正在遵循C ++教程。任何人都可以解释我哪里出错了?我知道扩展STL容器的功能是不好的形式,但这纯粹是一种学术上的追求。
答案 0 :(得分:4)
我认为您错误的直接原因是您需要typename
:
typename std::list<T>::iterator i, e = this.short_list.end();
...因为编译器没有意识到iterator
是一种类型。
但你真的不想从std::list
派生出来,而且你不想写自己的那种。