I'm working on some homework and receiving the strangest error. Hoping you can help. I am getting this error:
Cannot access private member in class
Note: I am obviously not done writing this but I try to test for errors as I go. Thanks so much for any input you have!
// Amanda
// SoccerPlayer.cpp : main project file.
// October 6, 2012
/* a. Design a SoccerPlayer class that includes three integer fields: a player's jersey number,
number of goals, and number of assists. Overload extraction and insertion operators for the class.
b. Include an operation>() function for the class. One SoccerPlayer is considered greater
than another if the sum of goals plus assists is greater.
c. Create an array of 11 SoccerPlayers, then use the > operator to find the player who has the
greatest goals plus assists.*/
#include "stdafx.h"
#include<conio.h>
#include<iostream>
#include<string>
class SoccerPlayer
{
friend std::ostream operator<<(std::ostream, SoccerPlayer&);
// friend std::istream operator>>(std::istream, SoccerPlayer&);
private:
int jerseyNum;
int numGoals;
int numAssists;
public:
SoccerPlayer(int, int, int);
};
SoccerPlayer::SoccerPlayer(int jersey, int goal, int assist)
{
jerseyNum = jersey;
numGoals = goal;
numAssists = assist;
}
std::ostream operator<<(std::ostream player, SoccerPlayer& aPlayer)
{
player << "Jersey #" << aPlayer.jerseyNum <<
" Number of Goals " << aPlayer.numGoals <<
" Number of Assists " << aPlayer.numAssists;
return player ;
};
int main()
{
return 0;
}
You want to pass and return the streams by reference: you can't copy IOStream objects. Also, in case of the write, you probably want to pass a SoccerPlayer const&
. With these changes you code should compiler (although there is also an excess semicolon after the definition of the output operator).
That is, you output operator should be declared as
std::ostream& operator<< (std::ostream&, SockerPlayer const&)
(both in its definition and the friend
declaration).
std::ostream
is not copyable. You need to pass a reference, and return a reference:
friend std::ostream& operator<<(std::ostream&, const SoccerPlayer&);
....
std::ostream& operator<<(std::ostream& player, const SoccerPlayer& aPlayer) { /* as before */ }
Note also that there is no reason not to pass the SoccerPlayer
as a const
reference.
On a note completely unrelated to the error, you should prefer to use the constructor initialization list instead of assigning values to data members in the constructor body:
SoccerPlayer::SoccerPlayer(int jersey, int goal, int assist)
: jerseyNum(jersey), numGoal(goal), numAssists(assist) {}
You should send the reference of ostream object to your friend function.
So it will be something like friend std::ostream& operator<<(std::ostream &, SoccerPlayer&);
both in prototype as well as in definition.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With