首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在构造函数中初始化共享指针?

如何在构造函数中初始化共享指针?
EN

Stack Overflow用户
提问于 2021-04-08 06:06:09
回答 1查看 176关注 0票数 0

我正在尝试将构造函数中的其他类中的对象初始化为共享指针。我需要一个切碎的指针,因为我需要在另一个方法中使用引用。

标题

代码语言:javascript
复制
class MyClass
{
public:
   MyClass() ;
   ~MyClass() {};
   void myMethod();
private:
   std::shared_ptr<dds::pub::Publisher>m_pub;
   std::shared_ptr<dds::domain::DomainParticipant>m_part;
};

cpp

代码语言:javascript
复制
MyClass::MyClass()  
{
  m_part = std::make_shared<dds::domain::DomainParticipant>(domain::default_id());
  m_pub = std::make_shared<dds::pub::Publisher>(m_part);
}
MyClass::myMethod()
{
  //m_part, m_pub are used here 
}

我在这里错过了什么?

代码语言:javascript
复制
Error   C2039   'delegate': is not a member of 'std::shared_ptr<dds::domain::DomainParticipant>'     

dds::pub::Publisher

代码语言:javascript
复制
namespace dds
{
  namespace pub
  {
     typedef dds::pub::detail::Publisher Publisher;
  }
}

Publisher

代码语言:javascript
复制
namespace dds { namespace pub { namespace detail {
typedef 
dds::pub::TPublisher<org::eclipse::cyclonedds::pub::PublisherDelegate> Publisher;
} } }

PublisherDelegate

代码语言:javascript
复制
namespace dds { namespace pub { namespace detail {
    typedef 
dds::pub::TPublisher<org::eclipse::cyclonedds::pub::PublisherDelegate> Publisher;
} } }


class OMG_DDS_API PublisherDelegate : public 
org::eclipse::cyclonedds::core::EntityDelegate
{
public:
typedef ::dds::core::smart_ptr_traits< PublisherDelegate >::ref_type ref_type;
typedef ::dds::core::smart_ptr_traits< PublisherDelegate >::weak_ref_type weak_ref_type;

PublisherDelegate(const dds::domain::DomainParticipant& dp,
                  const dds::pub::qos::PublisherQos& qos,
                  dds::pub::PublisherListener* listener,
                  const dds::core::status::StatusMask& event_mask);

TPublisher

代码语言:javascript
复制
template <typename DELEGATE>
class dds::pub::TPublisher : public dds::core::TEntity<DELEGATE>
{
public:

   typedef dds::pub::PublisherListener                 Listener;

public:
   OMG_DDS_REF_TYPE_PROTECTED_DC(TPublisher, dds::core::TEntity, DELEGATE)
   OMG_DDS_IMPLICIT_REF_BASE(TPublisher)

   TPublisher(const dds::domain::DomainParticipant& dp);

   TPublisher(const dds::domain::DomainParticipant& dp,
           const dds::pub::qos::PublisherQos& qos,
           dds::pub::PublisherListener* listener = NULL,
           const dds::core::status::StatusMask& mask = dds::core::status::StatusMask::none());

我尝试了答案中的方法得到了新的错误,

代码语言:javascript
复制
Error   C2672   'std::dynamic_pointer_cast': no matching overloaded function  in TPublisher.hpp   
EN

回答 1

Stack Overflow用户

发布于 2021-04-08 06:13:21

我想m_pub应该像这样初始化

代码语言:javascript
复制
m_pub = std::make_shared<dds::pub::Publisher>(*m_part);

dds::pub::Publisher a.k.a类。dds::pub::TPublisher具有引用const dds::domain::DomainParticipant的构造函数。

问题更新后,答案就会改变。

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

https://stackoverflow.com/questions/66998170

复制
相关文章

相似问题

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