Я новичок в концепции shared_ptr и пытался восстановить мою программу таким образом, что она использует интеллектуальные указатели вместо обычных. Я пытаюсь использовать shared_ptr с Xerces-c, и у меня возникли проблемы с инициализацией моего обработчика ошибок.Xerces-c & shared_ptrs
У меня есть класс, который реализует errorHandler.
class Handler: public ErrorHandler {
public:
void warning (const SAXParseException&) { cerr << "THIS IS A WARNING\n";}
void error (const SAXParseException&) { cerr << "THIS IS A ERROR\n"; return;}
void fatalError(const SAXParseException&) { cerr << "THIS IS A FATALERROR\n";}
void resetErrors() {}
}
В реализации я пытаюсь передать класс, который я реализовал с ErrorHandler в функции setErrorHandler:
boost::shared_ptr<XercesDOMParser> m_Parser;
boost::shared_ptr<Validator> m_ErrorHandler;
m_ErrorHandler = boost::shared_ptr<Handler>(new Handler());
m_Parser->setErrorHandler(m_ErrorHandler);
Но ошибки на последней строке, так как тип оленья кожа совпасть :
Ошибка: нет функции согласования для вызова 'xercesc_3_1 :: XercesDOMParser :: setErrorHandler (повышение :: shared_ptr &)' /opt/include/xercesc/parsers/XercesDOMParser.hpp:236: примечание: кандидаты: аннулируются xercesc_3_1 :: XercesDOMParser :: setErrorHandler (xercesc_3_1 :: ErrorHandler *)
С регулярными указателями, это было прекрасно, чтобы сказать:
XercesDOMParser * m_Parser;
Handler * errorHandler;
m_Parser = new XercesDOMParser;
errorHandler = new Handler();
m_Parser->setErrorHandler(errorHandler);
Но при использовании смарт-указатели, как это инициализация делается? Спасибо
.get() работал совершенно. Благодаря! – user459811