私はshared_ptrの概念に不慣れで、通常のポインターの代わりにスマートポインターを使用するようにプログラムを再構築しようとしていました。Xerces-cでshared_ptrを使用しようとしていますが、エラーハンドラーの初期化に問題があります。
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);
しかし、スマートポインターを使用する場合、この初期化はどのように行われますか?ありがとう