У меня есть проект DLL в VS2008, который заставляет мое приложение выбрасывать нарушение доступа. Я отладил и обнаружил, что в строке Log4cxx, LOG4CXX_DEBUG(logger, myMessage << doubleA << double B);
оператор << вызывает проблему. Это касается всех уровней ведения журнала. Я хотел бы сделать эту работу, переопределив оператор <<. Но это кажется сложнее, чем сказано. Я искал это в StackOverflow и пытался до сих пор: </p>
Я пытался переопределить его в пространстве имен Log4cxx
:
namespace log4cxx { namespace helpers {
ostream& operator<<(ostream& os, const double& a);
} }
Это не компилируется:
more than one operator "<<" matches these operands:
function "log4cxx::helpers::operator<<(std::ostream &os, const double &a)"
function "std::basic_ostream<_Elem, _Traits>::operator<<(double _Val) [with _Elem=char, _Traits=std::char_traits<char>]"
operand types are: std::basic_ostream<char, std::char_traits<char>> << const double
Я попытался переопределить в пространстве имен Std (я знаю, что это не рекомендуется):
namespace std {
ostream& operator<<(ostream& os, const double& a);
}
Это выдает:
more than one operator "<<" matches these operands:
function "std::operator<<(std::ostream &os, const double &a)"
function "std::basic_ostream<_Elem, _Traits>::operator<<(double _Val) [with _Elem=char, _Traits=std::char_traits<char>]"
operand types are: std::basic_ostream<char, std::char_traits<char>> << const double
Любая идея, как я могу перегрузить оператор правильнои заставить его работать ??
Еще одна вещь, которую я попробовал: Я пытался создать строку сообщения, прежде чем она перейдет к строке регистратора. string myMessage = "myMessage" + double A + doubleB;
и затем использование этой строки в качестве LOG4CXX_DEBUG(logger, myMessage);
Это ничего не делает. Получил то же нарушение доступа. И я попытался ...
std::ostringstream os;
os << "myMessage here << doubleX<< ", valuey=" << doubleY;
LOG4CXX_DEBUG(logger, os.str());
Здесь тоже самое нарушение прав доступа. Мне удалось собрать log4cxx
с VS2008, но я подумал, что это может быть проблемой, так как я использовал тот, который построен с VS2005.
Не могли бы вы помочь здесь? Что еще я могу сделать, чтобы сделать эту работу?