From: "John Harrison" Newsgroups: comp.lang.c++,comp.os.msdos.djgpp References: Subject: Re: passing istringstream as istream in param Lines: 65 X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 5.50.4133.2400 X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4133.2400 Message-ID: <4j%t5.6782$vo6.96767@news2-win.server.ntlworld.com> Date: Fri, 8 Sep 2000 07:03:21 +0100 NNTP-Posting-Host: 213.104.182.96 X-Complaints-To: abuse AT ntlworld DOT com X-Trace: news2-win.server.ntlworld.com 968393024 213.104.182.96 (Fri, 08 Sep 2000 07:03:44 BST) NNTP-Posting-Date: Fri, 08 Sep 2000 07:03:44 BST Organization: ntlworld News Service To: djgpp AT delorie DOT com DJ-Gateway: from newsgroup comp.os.msdos.djgpp Reply-To: djgpp AT delorie DOT com "Mostyn Lee" wrote in message news:f6Yt5.55$t42 DOT 3484 AT nsw DOT nnrp DOT telstra DOT net... > i used flex to generate a parser c++ class, and this class requires a > istream * as its parameter > > yyFlexLexer::yyFlexLexer( istream* arg_yyin, ostream* arg_yyout ) > > i need to parse from a character buffer, and have created a istringstream. > the object will not accept the istringstream as a valid type parameter. > i am using visual c++ 6.0 with a GNU flex generated class > > > #include > #include > #include > // .... > using namespace std; > // .... > > string constructstring = ReturnsAString(); > istringstream lexingstream(constructstring); > lexingstream << constructstring; > > yyFlexLexer myyyFlexLexer(&lexingstream, std::cout); > // .... > > gets the error : > error C2664: '__thiscall yyFlexLexer::yyFlexLexer(class istream *,class > ostream *)' : cannot convert parameter 1 from 'class > std::basic_istream > *' to 'class istream > *' > > i have tried several things > : i have tried to declare a istream to copy the data into, but i always get > an "ambiguous symbol `istream` " error > : i have tried using various `using` and direct (std::istream) methods, but > all have errors > > do I need some sort of casting? > am I #including something wrong? > why cant I just declare, > istream streamname; I'd guess that your flex generated files are using the old style iostream library. Take a look in the generated files and if you see #include replace it with #include // no .h using namespace std; In Visual C++ the non-standard and the standard are not identical so you may find that you have to do a little more tweaking of the code. john