overload insert operator problem
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