2011-01-07 3 views
0

私はshared_ptrの概念を初めて使い、普通のものの代わりにスマートポインタを使用するように私のプログラムを再構築しようとしていました。私はshared_ptrをXerces-cで使用しようとしています。エラーハンドラの初期化に問題があります。Xerces-c&shared_ptrs

私はerrorHandlerを実装するクラスを持っています。私はsetErrorHandler関数に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() {} 
} 

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); 

しかし、エラーが出て、最後の行に型が一致doesntのため、 :

エラー:注意: '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

関連する問題