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


class SimpleClass
{
public:
	SimpleClass();
	SimpleClass(SimpleClass &);
	~SimpleClass();
	friend ostream & operator<<(ostream &,SimpleClass&);
	int GetData();
	void SetData(int);
	void testfunction(SimpleClass);
private:
	int itsData;
};

SimpleClass::SimpleClass():itsData(0){cout<<"Default constructor called!"<<endl;}
SimpleClass::SimpleClass(SimpleClass &rhs){cout<<"Copy constructor called!"<<endl;}
SimpleClass::~SimpleClass(){cout<<"Destructor called!"<<endl;}

int SimpleClass::GetData(){return itsData;}
 
ostream& operator<<(ostream &o, SimpleClass &rhs)
{
	o<<rhs.GetData();
	return o;
}

void SimpleClass::testfunction(SimpleClass obj)
{	
	//why at this place default constructor is not called
	obj.SetData(2);
}//Destructor is called when obj goes out of scope

void SimpleClass::SetData(int i)
{
	itsData=i;
}

int main()
{
	SimpleClass obj; //this will cause message "Default constructor called"
	cout<<obj<<endl;
	obj.testfunction(obj);
	return 0;
}
If I put on first two lines:
#include <iostream>
using namespace std;
I get following compiler error:
c:\program files\microsoft visual studio\myprojects\konstruktor\konstruktor.cpp(45) : error C2593: 'operator <<' is ambiguous
Error executing cl.exe.

but if I put
#include <iostream.h> it works fine
why is this happening and how to fix it