game.h
#ifndef GAME_H
#define GAME_H
#include <string>
#include <iostream>
#include "piece.h"
using namespace std;
class Game
{
private:
string white;
string black;
string title;
istream* in;
ostream* out;
public:
Game();
Game(istream&, ostream&);
void display(Colour, short);
};
#endif
game.cpp
#include <iostream>
#include <string>
#include <sstream>
#include "game.h"
#include "board.h"
#include "piece.h"
using namespace std;
Game::Game()
{
//nothing
}
Game::Game(istream& is, ostream& os)
{
in = is;
out = os;
}
void Game::display(Colour colour, short moves)
{
//out << "a";
}
I'm trying to use the istream and ostream in other parts of my class but I can't because g++ won't let me reference is to in. Any ideas?
You simply want a reference variable, not a pointer.
class Game
{
private:
...
istream& in;
ostream& out;
public:
Game(istream&, ostream&);
};
Game::Game(istream& is, ostream& os)
: in( is ),
out( os )
{ }
The existing code compiles because of a couple language quirks:
istream
/ ostream
are convrtible to void*
to allow you to check their error status as in
if( in ) { do_something( in ); }
your compiler apparently allowed void*
to be converted to ostream*
(I believe in error, and you should at least get a warning from this).
You should deference the pointer:
*out << "a";
For more convenient use, to not deference the pointers each time, and for more readability you can use references instead of pointers.
class Game
{
// ...
std::istream& in; // notice explicit namespace std::
std::ostream& out;
// ...
};
Then you can write:
out << "a";
Plus, it is not a good habit to do so:
using namespace std;
This way you are exposing the names of std namespace.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With