Xerces-c&共享指针

发布于 2024-10-11 02:33:16 字数 1335 浏览 2 评论 0原文

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

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

I'm new to the concept of shared_ptr and was trying to reconstruct my program such that it is using smart pointers instead of the regular ones. I ama trying to use shared_ptr with Xerces-c and I am having trouble initializing my errorhandler.

I have a class that implements the 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() {}
}

In the implementation I am trying to pass the class that I've implemented from ErrorHandler into the setErrorHandler function:

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

But it errors out on the last line because the type doesnt match up:

Error: no matching function for call to ‘xercesc_3_1::XercesDOMParser::setErrorHandler(boost::shared_ptr&)’
/opt/include/xercesc/parsers/XercesDOMParser.hpp:236: note: candidates are: void xercesc_3_1::XercesDOMParser::setErrorHandler(xercesc_3_1::ErrorHandler*)

With regular pointers, it was fine to say:

     XercesDOMParser * m_Parser;
     Handler * errorHandler;
m_Parser = new XercesDOMParser;
errorHandler = new Handler();
m_Parser->setErrorHandler(errorHandler);

But when using smart pointers, how is this initialization done? Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

娇柔作态 2024-10-18 02:33:16

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

If the m_Parser doesn't take a shared_ptr, you can't make it. shared_ptr's aren't a silver bullet, you can only use them in your own code. You can use the .get() method to return the raw pointer under the smart pointer for compatibility with legacy code.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文