The warning is being generated by the ostream & operator<<(ostream &os, A &A0) function.
Here’s how the class’s defined:
class A
{
public:
friend ostream & operator<<(ostream &os, A &A0);
A& operator=(string strSlot_);
A& operator+(string strSlot_);
A& operator+(const A &B);
A& operator=(const A &B);
string slotReturn();
A(string strSlot_);
A(const A &object);
void slotChange();
void sCout();
~A();
A();
private:
string strSlot;
int n;
};
ostream & operator<<(ostream &os, A &A0)
{
os << "strSlot = \"" << A0.slotReturn() << "\"" << endl;
}
string A::slotReturn()
{
return strSlot;
}
The question is, what is it supposed to return? *this doesn’t seem to work (because it’s a friend?). (It’s merely a warning, but still, I just want to know.)
Also, why can’t I pass A &A0 as a const (in which case the error is: “passing ‘const A’ as ‘this’ argument of ‘std::string A::slotReturn()’ discards qualifiers”)?
You need to return the
std::ostream&itself:As an aside, the terminology is slightly off. There is no “friend class”. The
std::ostream& operator<<is the friend here. But it doesn’t even need to be a friend, because it just calls a public member function ofA. So you can remove the friend declaration.You should probably also make
slotReturn()aconstmethod:and modify the
ostream& operator<<to take a const reference:This will allow you to print out temporaries: