iostream and other stream class are not actually class, but typedefs, right?
Here is the problem, I tried to initialize a istream object in initialization list, but unfortunately I got an error, code goes bellow:
class A
{
public:
A(istream &is=cin): ais(is)
{}
private:
istream ais;
};
Can’t compile with g++, error:
synthesized method ‘std::basic_istream<char, std::char_traits<char> >::basic_istream(const std::basic_istream<char, std::char_traits<char> >&)’ first required here
I searched SO, found that, iostream cannot be assigned or copy. But why cannot I initialize it in the initialization list?
Cuz I think, the initialization list will invoke the object’s constructor/copy-constructor, right?
Your code attempts to turn one
istream, the one passed to the constructor, into twoistreams, the one that was passed to the constructor andais. Anistreamobject represents that actual stream itself. There is only one stream and there is no way to somehow turn it into two streams.It’s not even clear what that would mean. If there’s some data on the stream, does whichever stream reads first get it? Or do they both get it? If so, who or what duplicates it?
An
istreamis like a file itself. You cannot turn one file into two files without copying the data from one to the other yourself. You can, however, have as many references or pointers to the sameistreamas you want. The solution to your problem is probably to makeaisa reference.