[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: C++: istream_iterator<string> has no component named operator!=.



Shaul Karl <shaulka@bezeqint.net> writes:

> > > int main() 
> > > {
> > >     ifstream input("main.cc");
> > >     istream_iterator<string> iter1(input), iter2, eof;
> > >     iter1 = find(iter1, iter2, "main()");
> > >     iter2 = find(iter1, eof, "}");
> >               ^^^^
> > These are your problem.  If you put 
> > 
> >     cout << "iter1: " << *iter2 << "\titer2: " << *iter2 << "\n";
> > 
> > immediately following those find statements, you'll get the output
> > 
> >     iter1: }	iter2: }
> > 
> > which means the find statements aren't doing what you want.  The for
> > loop is working fine, however.
> 
> You didn't get the expected printing of *iter1 and *iter2 because you 
> have a typo. The printing line uses *iter2 where you wanted *iter1.

Ugh, yeah, you're right.  Sorry about that.  So the find function does
work correctly, but the for loop is broken.

> As for the initialization of iter2 and eof, as far as I know they 
> assume the default value, which is EOF.

That appears to be true on my system.

> Beside, having it compiled without errors/warnings although gdb comment 
> that there is no != method is odd.

As someone else mentioned, (iter1 == iter2) even though (*iter1 !=
*iter2).  It seems as though istream_iterator's are weird; for example,
you can't seem to walk through the stream:

    cout << "iter1: " << *iter1 << "\titer2: " << *iter2 << "\t++iter1: " 
         << *(++iter1) << "\n";

produces:

    iter1: main()	iter2: }	++iter1: main()

comp.lang.c++ would be a better place to ask this question (ie. they'll
probably give you a correct answer).

-- 
Brian Nelson <nelson@bignachos.com>
BigNachos@jabber.org
http://bignachos.com



Reply to: