Re: question regarding operator << overloading
Goran wrote:
// main.c++: In function ?std::ostream&
BADLIB::operator<<(std::ostream&, BADLIB::BadClass_t&)?:
// main.c++:110: Error: no match for ?operator<<? in ?aStream <<
BADLIB::BadClass_t::GetValue() const()?
It would be also good to know which line is 110, don't you think?
[..]
namespace GOODLIB {
class GoodClass_t {
public:
GoodClass_t();
string GetValue() const;
void SetMode(const bool&);
bool GetMode() const;
private:
string itsValue;
bool itsMode;
};
// this operator works
ostream& operator <<(ostream&, GoodClass_t&);
Note that 'GoodClass_t' object is *non-const*. Is there a reason
why this is so?
}
[..]
void
GOODLIB::
GoodClass_t::
SetMode(const bool& aMode) {
itsMode = aMode;
}
ostream&
GOODLIB::
operator <<(ostream& aStream, GoodClass_t& aWC) {
if(aWC.GetMode()) {
aWC.SetMode(false);
So, while *outputting* an object you *set* its mode? I don't know.
Does not seem like a good idea. Anyway...
aStream << "Begin Opening (" << aWC.GetValue() << ") End Opening
\n";
}
else {
aWC.SetMode(true);
aStream << "Begin Closing (" << aWC.GetValue() << ") End Closing
\n";
}
return aStream;
}
//// END GOOD CLASS ////
//// START BAD CLASS////
// The BadClass_t contains a private GoodClass_t Object available by
// GetValue(). So it's very simple. But in conjunction with
GoodClass_t I
// really don't know where's the failure.
using namespace std;
using namespace GOODLIB;
namespace BADLIB {
class BadClass_t {
public:
BadClass_t(const GoodClass_t&);
GoodClass_t GetValue() const;
So, this class returns an rvalue as well...
private:
GoodClass_t itsGoodObj;
};
ostream& operator <<(ostream&, /* const */ BadClass_t&);
}
[..]
ostream&
BADLIB::
operator <<(ostream& aStream, /* const */ BadClass_t& aBC) {
aStream << aBC.GetValue() << "\nsome stuff\n" << aBC.GetValue();
So, let's examine this. 'aBC.GetValue()' returns a temporary,
which you try to pass to the op<< that expects an lvalue. The
argument of the op<< is a reference to non-const that cannot be
bound to a temporary.
You need to revise your interface.
}
//// END BAD CLASS////
[..]
V
--
Please remove capital 'A's when replying by e-mail
I do not respond to top-posted replies, please don't ask