模板和运算符重载和迭代器

时间:2015-11-03 09:36:45

标签: c++ templates iterator operator-overloading

我被要求编写一个与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)”。有谁可以帮助我?

1 个答案:

答案 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){};,但这与您提到的编译错误无关;这个问题的解决方案取决于你究竟需要做什么。