我被要求编写一个与istream_iterator具有相同功能的迭代器,并且迭代器的名称是CMyistream_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;
}
但代码出错并且说“不匹配'运算符*'(操作数类型是CMyistream)”。有谁可以帮助我?
答案 0 :(得分:0)
您的问题与模板无关,而与运算符重载的基础有关。你需要简单地写一下
T operator * ();
和
T CMyistream_iterator<T>::operator * (){
return my; // meaning this->my
}
原因是,由于您的运营商已经是班级成员,他们已经拥有 一个隐式参数 - 类对象本身,这是您需要使用的参数。
您编写的代码声明不是间接运算符(*x
),而是乘法运算符(x*y
)。
您的代码中的另一个问题是您尝试将istream
转换为int
中的CMyistream_iterator(istream& x):my(x){};
,但这与您提到的编译错误无关;这个问题的解决方案取决于你究竟需要做什么。