delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2000/09/08/02:17:00

From: "John Harrison" <jahhaj AT bigfoot DOT com>
Newsgroups: comp.lang.c++,comp.os.msdos.djgpp
References: <f6Yt5.55$t42 DOT 3484 AT nsw DOT nnrp DOT telstra DOT net>
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" <mostyn AT ibc DOT com DOT au DOT SPAM> 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 <iostream>
> #include <string>
> #include <sstream>
> // ....
> 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<char,struct std::char_traits<char> > *' 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 <iostream.h>

replace it with

#include <iostream>    // no .h
using namespace std;

In Visual C++ the non-standard <iostream.h> and the standard <iostream> are
not identical so you may find that you have to do a little more tweaking of
the code.

john



- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019