我是新來的shared_ptr的概念,並試圖重建我的程序,它使用的智能指針,而不是常規的。我試圖用Xerces-c使用shared_ptr,但我在初始化錯誤處理程序時遇到問題。的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 2011-01-07 19:06:14