KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Say I have a class A and an operator<< declared like so: // A.h class A { // A stuff }; std::ostream& operator<<(std::ostream& os, const A& a); somewhere else I use my logger with A: LoggerPtr logger(LogManager::getLogger("ThisObject")); A a; LOG4CXX_INFO(logger, "A: " << a); The compiler is complaining: binary '<<' : no operator found which takes a right-hand operand of type 'const A' (or there is no acceptable conversion) D:\dev\cpp\lib\apache-log4cxx\log4cxx\include\log4cxx\helpers\messagebuffer.h 190 This error takes me to the declaration of the operator<< : // messagebuffer.h template<class V> std::basic_ostream<char>& operator<<(CharMessageBuffer& os, const V& val) { return ((std::basic_ostream<char>&) os) << val; } LOG4XX_INFO macro expands to: #define LOG4CXX_INFO(logger, message) { \ if (logger->isInfoEnabled()) {\ ::log4cxx::helpers::MessageBuffer oss_; \ logger->forcedLog(::log4cxx::Level::getInfo(), oss_.str(oss_ << message), LOG4CXX_LOCATION); }} MessageBuffer "defines" this operator as well: // messagebuffer.h template<class V> std::ostream& operator<<(MessageBuffer& os, const V& val) { return ((std::ostream&) os) << val; } I don't understand how to overload this operator the right way to make it work. Any idea?
Tags (comma-separated)
Save Edits
Cancel