2011-01-07 66 views
0

我是新來的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); 

但使用智能指針時,這是怎麼做初始化?由於

回答

1

如果m_Parser不採取shared_ptr的,你不能做到這一點。 shared_ptr不是一個銀色的子彈,你只能在你自己的代碼中使用它們。您可以使用.get()方法返回智能指針下的原始指針,以便與舊代碼兼容。

+0

.get()完美工作。謝謝! – user459811 2011-01-07 19:06:14

相關問題