[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[ale] Q: directing stream I/O _the_C++_way_
- Subject: [ale] Q: directing stream I/O _the_C++_way_
- From: jknapka at kneuro.net (Joe Knapka)
- Date: Sun Nov 28 01:30:15 2004
- In-reply-to: <[email protected]>
- References: <[email protected]>
Hi John,
Your code is failing due to the semantics of references.
(1) References must always be initialized when declared, and
(2) Assigning to a reference is exactly the same as assigning to the
referenced object; since ostreams aren't assignable (operator== is
private), assigning to a reference to an ostream won't work either.
You can use pointers, but it's ugly:
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char* argv[]) {
ostream* out = &cout;
if (argc>1) {
out = new fstream(argv[1]);
}
ostream& ref_out = *out;
ref_out << "Hello, world!" << endl;
if (out != &cout) delete out; // Ick-a-rama...
}
Cheers,
-- Joe
John Mills <johnmills at speakeasy.net> writes:
> Fletch --
>
>
> On Sat, 27 Nov 2004, Fletch wrote:
>
> > I want to say that you should be able to declare an ostream and assign
> > either an ofstream or cout as desired.
> >
> > ostream& log; <-------[initializing to 'cout' => same whine]-----+
> > |
> > if( logfilename ) { |
> > ofstream logfile( logfilename.c_str() ); |
> > log = logfile; |
> ^^^^^^^^^^^^^---- This doesn't compile. I get: |
> V
> Switchbox.cpp:38: `logging' declared as reference but not initialized
> /usr/include/c++/3.2.3/bits/ios_base.h: In member function
> `std::basic_ios<char, std::char_traits<char> >& std::basic_ios<char,
> std::char_traits<char> >::operator=(const std::basic_ios<char,
> std::char_traits<char> >&)':
> /usr/include/c++/3.2.3/bits/ios_base.h:427: `std::ios_base&
> std::ios_base::operator=(const std::ios_base&)' is private
> Switchbox.cpp:133: within this context
> make: *** [Switchbox.o] Error 1
>
> > } else {
> > log = cout;
> > }
>
> - John Mills
> john.m.mills at alum.mit.edu
>
> _______________________________________________
> Ale mailing list
> Ale at ale.org
> http://www.ale.org/mailman/listinfo/ale
>
>
--
"Meet the new boss / Same as the old boss..." -- The Who
... Oh well, at least there's 2008.
--
pub 1024D/BA496D2B 2004-05-14 Joseph A Knapka
Key fingerprint = 3BA2 FE72 3CBA D4C2 21E4 C9B4 3230 94D7 BA49 6D2B
If you really want to get my attention, send mail to
jknapka .at. kneuro .dot. net.