首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xerces-c和shared_ptrs

Xerces-c和shared_ptrs
EN

Stack Overflow用户
提问于 2011-01-08 02:51:10
回答 1查看 506关注 0票数 1

我刚开始接触shared_ptr的概念,并且正在尝试重新构建我的程序,以便它使用智能指针而不是常规的指针。我正在尝试通过Xerces-c使用shared_ptr,但在初始化我的错误处理程序时遇到了问题。

我有一个实现errorHandler的类。

代码语言:javascript
复制
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函数中:

代码语言:javascript
复制
   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*)

对于常规指针,可以这样说:

代码语言:javascript
复制
     XercesDOMParser * m_Parser;
     Handler * errorHandler;
m_Parser = new XercesDOMParser;
errorHandler = new Handler();
m_Parser->setErrorHandler(errorHandler);

但是当使用智能指针时,这种初始化是如何完成的呢?谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-01-08 02:55:50

如果m_Parser不带shared_ptr,你就做不到。shared_ptr不是灵丹妙药,您只能在自己的代码中使用它们。为了与旧式代码兼容,可以使用.get()方法返回智能指针下的原始指针。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4629121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档