模板和运算符重载以及迭代器
template and operator overloading and iterator
我被要求编写一个与istream_iterator具有相同功能的迭代器,迭代器的名称为CMistream_iterator。我想设置*运算符的函数,因为它在迭代器中使用。
template<class T>
class CMyistream_iterator{
public:
T my;
T* cm;
CMyistream_iterator(istream& x):my(x){};
T operator * (CMyistream_iterator<T>& p);
};
template<class T>
T CMyistream_iterator<T>::operator * (CMyistream_iterator<T>& p){return p.my;}
int main()
{
CMyistream_iterator<int> inputInt(cin);
int n1,n2,n3;
n1 = * inputInt;
}
但代码出现错误,并表示"不匹配‘operator*’(操作数类型为CMistream)"。有人能帮我吗?
您的问题与模板无关,而是与运算符重载的基础有关。你需要写简单的
T operator * ();
和
T CMyistream_iterator<T>::operator * (){
return my; // meaning this->my
}
原因是由于您的运算符已经是类成员,因此它们已经一个隐式参数——类对象本身,这就是您需要使用的参数。
您编写的代码声明的不是间接运算符(*x
),而是乘法运算符(x*y
)。
代码中的另一个问题是,您试图在CMyistream_iterator(istream& x):my(x){};
中将istream
转换为int
,但这与您提到的编译错误无关;这个问题的解决取决于你到底需要做什么。
相关文章:
- 迭代器类的重载前缀增量运算符会引发分段错误
- 了解运算符重载和迭代器,为什么它会打印出"wrhrwwr"?
- 迭代器和无符号整数的重载 + 运算符
- 成员函数不能为集合迭代器和const_iterator的输入重载(但可以为其他 STL 迭代器重载)
- 如何实现容器的重载和模板函数的迭代器?
- 为什么标准容器迭代器不会重载"->*"?
- 前向迭代器的重载
- VC++11映射和多映射迭代器(重载)C2535
- 重载输出运算符<<以使用 STL 列表迭代器
- 迭代器 CPP,运算符重载
- 使用常量迭代器的运算符重载
- 向量迭代器在赋值重载中不兼容
- 迭代器 - vector::itrator 和 array::iterator 的重载函数
- 如何将重载增量运算符用于迭代器
- 运算符重载和迭代器混淆
- C++ 解释重载成员函数迭代器(int i = 0) 的构造"one liner":i(i) { };
- 重载迭代器类的增量运算符
- 模板和运算符重载以及迭代器
- 模板泛型树类的模板迭代器的c++操作符重载
- 重载操作符<对于非随机迭代器