2011-01-07 2 views
0

Я новичок в концепции 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); 

Но при использовании смарт-указатели, как это инициализация делается? Спасибо

ответ

1

Если m_Parser не принимает shared_ptr, вы не сможете это сделать. shared_ptr - это не серебряная пуля, вы можете использовать их только в своем собственном коде. Вы можете использовать метод .get() для возврата необработанного указателя под интеллектуальным указателем для совместимости с устаревшим кодом.

+0

.get() работал совершенно. Благодаря! – user459811

Смежные вопросы