模板中的方法:一个有效,一个不实例化
methods in template: one works, one does not instantiate
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)'
您需要在方法定义前面加上类名:
template <class T, int MAXSIZE>
class svector { ... };
template <class T, int MAXSIZE>
class svector<T,MAXSIZE>::iterator svector<T,MAXSIZE>::erase(
class svector<T,MAXSIZE>::iterator position){ ... }
当您在类外部内联方法时。
相关文章:
- void() 是一个有效的C++表达式吗?
- C++14 : 2 个随机生成器 - 一个有效,另一个无效
- 使用 CMake 与其他静态库链接的静态库 - 一个有效,一个无效。为什么?
- 一个有效的图算法,满足以下条件
- 将一个数字拆分为多个数字,每个数字只有一个有效位
- 这是一个有效的单例类吗?
- C++,我正在尝试创建一个有效的.bmp输出文件
- 尝试获取用户输入和cout消息期望,当我输入一个有效名称时,它将所有这些命名
- 如何说一个有效或无效,即使一个是,另一个不是
- 模板中的方法:一个有效,一个不实例化
- 如何确保迷宫总是有一个有效的路径C++
- 这是一个有效的编译器优化吗
- 如何删除C++中浮点数的最后一个有效数字/尾数位
- 在给定平方矩阵的子矩阵中找到一个有效的算法来回答查询
- 我们可以检查一个指针以确保它是一个有效的地址吗
- 这是一个有效的生成文件吗?
- 指针和类有问题。两个相同的类,其中一个有效,一个无效
- dynamic_cast不能保证一个有效、完整的对象?
- 选择一个有效的数据结构来寻找韵律
- 将引用分配给引用是一个有效的操作