C++: << Operator does not work as expected

I am trying to overload the << operator.

I have a custom class called person.

I added this to person.h:

public:
.....
....
ostream &person::operator<<(ostream &stream);

I added this to person.cpp
....
....
ostream &person::operator<<(ostream &stream) {
            stream << this->getAge()  << " ";
            return stream;
      }

In the main function, I did the following.
person P4 = person("C", "C", 23); //first name, last name and age
cout << &P4 << " ";

The code compiles fine but when I run the code, I see this output:
0012FDFC

I am expecting output:
23

I am using Visual Studio 2008.

Not sure what am I doing wrong. Please help. Thanks in advance.
LVL 3
shekhar_shashiAsked:
Who is Participating?
 
jkrConnect With a Mentor Commented:
That's what evilrix' point was in your last question - you better make that
class person; // foward declaration

ostream& operator<< ( ostream& os, const student& p) ;

class person
{
  friend ostream& operator<< ( ostream& os, const person& p) ;

  // ...

};

ostream& operator<< ( ostream& os, const person& p)
{
  os << p.getAge();

  return 0s;
}

Open in new window

0
 
AndyAinscowConnect With a Mentor Freelance programmer / ConsultantCommented:
&P4 means the memory adress of P4

does this do what you expect
cout << P4 << " ";
0
 
shekhar_shashiAuthor Commented:
If I change the code this way, I get this compilation error:

error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'person' (or there is no acceptable conversion)      
0
Cloud Class® Course: SQL Server Core 2016

This course will introduce you to SQL Server Core 2016, as well as teach you about SSMS, data tools, installation, server configuration, using Management Studio, and writing and executing queries.

 
shekhar_shashiAuthor Commented:
Pardon my C++ ignorance here.

I am getting about 9 compilation errors after making these code changes.

Instead of posting all the compilation errors, let me ask a few questions:

Question 1:
Where should the forward declaration go?

class person; // foward declaration

ostream& operator<< ( ostream& os, const student& p) ;

Question 2: I am guessing this code needs to be placed in the header file.

class person
{
  friend ostream& operator<< ( ostream& os, const person& p) ;

  // ...

};

Am I correct?

Question 3:

I am guessing this code will be placed in the person.cpp file.

ostream& operator<< ( ostream& os, const person& p)
{
  os << p.getAge();

  return 0s;
}
 
Am I correct?

Thanks.


0
 
jkrConnect With a Mentor Commented:
1. Just above the operator's declaration

2. Actually, you just need to add
  friend ostream& operator<< ( ostream& os, const person& p) ;

to the declaration of the 'person' class.

3. You're absolutely correct ;o)
0
 
shekhar_shashiAuthor Commented:
Your answer was spot on.  Thanks a bunch for helping out this C++ newbie.
0
 
shekhar_shashiAuthor Commented:
Thanks
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.