I need help trying to compile and test this code, but I keep getting the error: template is incomplete, can not parse field.
Here is my code:
#include<iostream>
#include<iterator>
#include<vector>
#include<algorithm>
using namespace std;
template <class T>
class my_istream_iterator
{
public:
typedef charT char_type;
typedef traitsT traits_type;
typedef basic_istream<charT, traitsT> istream_type;
typedef input_iterator_tag iterator_category;
typedef T value_type;
typedef diff difference_type;
typedef const T* pointer;
typedef const T& reference;
my_istream_iterator():is(0), pred(false) {}
my_istream_iterator( istream_type &s ):is(&s) { read_next();}
reference operator*() const
{
return current;
}
pointer operator->() const
{
return &(operator*());
}
my_istream_iterator& operator++()
{
read_next();
return *this;
}
my_istream_iterator operator++(int)
{
my_istream_iterator temp = *this;
read_next();
return temp;
}
bool my_equal(const my_istream_iterator &x) const
{
return (pred == x.pred) && (!pred || is == x.is);
}
private:
T current;
istream_type *is;
bool pred;
void read_next()
{
if( is == NULL || (is >> current))
is = NULL;
}
};
template<class T>
bool operator==(const my_istream_iterator<T> &is1, const my_istream_iterator<T> &is2)
{
return is1.my_equal(is2);
}
template<class T>
bool operator!=(const my_istream_iterator<T> &is1, const my_istream_iterator<T> &is2)
{
return !is.my_equal(is2);
}
main()
{
vector<int> v;
my_istream_iterator<vector<int> > is(cin);
my_istream_iterator<vector<int> > eof;
copy(is, eof, back_inserter(v));
copy(v.begin(), v.end(), ostream_iterator<int>(cout, "\t"));
cout << endl;
}
can someone tell me what I'm doing wrong and how do I make the template complete?
Thank You,