template <class T, int MAXSIZE>
class svector {
public:
typedef T value_type;
class iterator : public std::iterator<std::input_iterator_tag,T> {
// ...
};
// ...
svector::iterator insert(svector::iterator position, const T& val);
void insert(svector::iterator position, size_t n, const T& val);
svector::iterator erase(svector::iterator position);
svector::iterator erase(svector::iterator first, svector::iterator last);
// ...
};
template <class T, int MAXSIZE>
class svector<T,MAXSIZE>::iterator svector<T,MAXSIZE>::insert (class svector<T,MAXSIZE>::iterator position, const T& val){
insert(position, 1, val);
return position;
}
template <class T, int MAXSIZE>
void svector<T,MAXSIZE>::insert (class svector<T,MAXSIZE>::iterator position, size_t n, const T& val){
// ...
}
template <class T, int MAXSIZE>
class svector<T,MAXSIZE>::iterator ??????????????????????????????erase (class svector<T,MAXSIZE>::iterator position){
return erase(position, position); // (1)
}
template <class T, int MAXSIZE>
class svector<T,MAXSIZE>::iterator ??????????????????????????????erase (class svector<T,MAXSIZE>::iterator first,
class svector<T,MAXSIZE>::iterator last) {
// ..
}
insert
方法已经过测试。但非常相似的erase
方法 不愿意,我不明白为什么。这里有一个UT - 摘录:模板中的方法:一种可行,一种不会实例化
typedef class util::svector<int, 10> vecIntX;
vecIntX v1;
for(int e = 0; e < 10; e++) v1.push_back(e);
vecIntX::iterator it = v1.begin();
v1.erase(it); // (2)
Eclipse的抱怨在线路(1):
"Invalid arguments, candidates are ? erase(?), ? erase(?,?)
行出现错误链接期间(2):
undefined reference to 'util::svector<int, 10>::erase(util::svector<int, 10>::iterator)'
@Patatoswatter原文很好。 Eclipse在第(1)行抱怨,但另一个错误来自ld。 – laune
对不起,那一点不清楚。我编辑是因为缺少代码格式化会擦除尖括号之间的所有内容。随意再次编辑,但请检查预览(一如既往)。 – Potatoswatter