#include <iostream>
using namespace std;
class point
{
public:
int x,y;
inline int getX() { return x; }
inline int getY() { return y; }
inline void setX(int v) { x=v; }
inline void setY(int v) { y=v; }
};
point operator+ (point& p1, point& p2)
{
point sum = {p1.x+p2.x, p1.y+p2.y};
return sum;
}
ostream& operator<< (ostream& out, point& p)
{
out<<"("<<p.x<<","<<p.y<<")";
return out;
}
int main()
{
point a={3,5},b={6,7};
cout<<"Sum="<<a+b;
}
The above code fails with compilation error:
startingClasses.C:33:17: error: invalid initialization of non-const reference of type ‘point&’ from an rvalue of type ‘point’
cout<<"Sum="<
But this below code works:
#include <iostream>
using namespace std;
class point
{
public:
int x,y;
inline int getX() { return x; }
inline int getY() { return y; }
inline void setX(int v) { x=v; }
inline void setY(int v) { y=v; }
};
point operator+ (point& p1, point& p2)
{
point sum = {p1.x+p2.x, p1.y+p2.y};
return sum;
}
ostream& operator<< (ostream& out, **const** point& p)
{
out<<"("<<p.x<<","<<p.y<<")";
return out;
}
int main()
{
point a={3,5},b={6,7};
cout<<"Sum="<<a+b;
}
Adding const
in the code makes it work... Still don't understand.