This gives me an error about not recognizing railcar. What am I doing wrong?
Code:
//
#include <iostream>
#include <string>
#include <fstream>
#include <cmath>
#include <stack>
#include <ctime>
#include <deque>

using namespace std;

//WORKAROUND
	class railcar;
	ostream & operator<<(ostream &, railcar & );
//WORKAROUND



class railcar;

{private:
	string cartype;
	int id;
	int train;

public:
	
	railcar(string c, int i, int t):cartype(c),id(i),train(t) { }
	
	railcar(): cartype(""),id(0),train(0) { };
	
	int idtrain() { return id; }
	
	friend ostream & operator << (ostream &, railcar & r);
	
	typedef long_train deque <railcar *>;

	railcar :: railcar (string c, int i, int t)
	{ 
	  railcar=r;	
	  cartype=c;
	  id=i;
	  train=t;
	}
};

ostream & operator<<(ostream & ostr, railcar & r)

{
	ostr << r.cartype << "   " << r.id << "    " << r.train;
	return ostr;
}



int  ()
{
	ofstream car_file("railcars.txt");
	std::cout << car_file << endl;









return 0;
}