Я новичок в концепции shared_ptr и пытался реконструировать мою программу так, чтобы она использовала умные указатели вместо обычных.Я пытаюсь использовать shared_ptr с Xerces-c, и у меня возникают проблемы при инициализации обработчика ошибок.
У меня есть класс, который реализует 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 (boost :: shared_ptr &) '/opt / include / xercesc / parsers / XercesDOMParser.hpp: 236: примечание: кандидаты: void 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);
Но как использовать эту инициализацию при использовании умных указателей?Спасибо