C++ Beginner - 'friend' functions and << operator overloading: What is the proper way to overload an
- by Francisco P.
Hello, everyone!
In a project I'm working on, I have a Score class, defined below in score.h. I am trying to overload it so, when a << operation is performed on it, _points + " " + _name is returned.
Here's what I tried to do:
ostream & Score::operator<< (ostream & os, Score right)
{
os << right.getPoints() << " " << right.scoreGetName();
return os;
}
Here are the errors returned:
1>c:\users\francisco\documents\feup\1a2s\prog\projecto3\projecto3\score.h(30) : error C2804: binary 'operator <<' has too many parameters
(This error appears 4 times, actually)
I managed to get it working by declaring the overload as a friend function:
friend ostream & operator<< (ostream & os, Score right);
And removing the Score:: from the function declaration in score.cpp (effectively not declaring it as a member).
Why does this work, yet the code describe above doesn't?
Thanks for your time!
Below is the full score.h
///////////////////////////////////////////////////////////
// Score.h
// Implementation of the Class Score
// Created on: 10-Mai-2010 11:43:56
// Original author: Francisco
///////////////////////////////////////////////////////////
#ifndef SCORE_H_
#define SCORE_H_
#include <string>
#include <iostream>
#include <iostream>
using std::string;
using std::ostream;
class Score
{
public:
Score(string name);
Score();
virtual ~Score();
void addPoints(int n);
string scoreGetName() const;
int getPoints() const;
void scoreSetName(string name);
bool operator>(const Score right) const;
ostream & operator<< (ostream & os, Score right);
private:
string _name;
int _points;
};
#endif