0
#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.

bolov
  • 72,283
  • 15
  • 145
  • 224

0 Answers0