我是 shared_ptr 概念的新手,并试图重建我的程序,以便它使用智能指针而不是常规指针。我正在尝试将 shared_ptr 与 Xerces-c 一起使用,但在初始化我的错误处理程序时遇到了麻烦。
我有一个实现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);
但是在使用智能指针的时候,这个初始化是怎么做的呢?谢谢