C++ 如何从共享ptr的引用中提取数据<;T&&燃气轮机;
这是我的函数定义C++ 如何从共享ptr的引用中提取数据<;T&&燃气轮机;,c++,c++14,shared-ptr,C++,C++14,Shared Ptr,这是我的函数定义 void subscribe(std::shared_ptr<StrategyOrderEvents &> &strategy) { auto p=make_pair(strategy.get()->m_StrategyName,strategy); } void订阅(标准::共享策略) { auto p=生成配对(strategy.get()->m_StrategyName,strategy); } 但是当我尝试执行strate
void subscribe(std::shared_ptr<StrategyOrderEvents &> &strategy)
{
auto p=make_pair(strategy.get()->m_StrategyName,strategy);
}
void订阅(标准::共享策略)
{
auto p=生成配对(strategy.get()->m_StrategyName,strategy);
}
但是当我尝试执行strategy.get()
时,我得到了以下错误:
“class std::shared_ptr”没有名为
“得到”
在StrategyOrderEvents
类中,我有一个数据成员名,我不想提取它
*编辑通知
get()->get()是一个尝试,我修复了strategy。get()->m_StrategyName不允许您形成指向引用的共享(或其他)指针 或者
void subscribe(std::shared_ptr<StrategyOrderEvents>& strategy)
(最好添加const
正确性)
您当前正在接受对对象引用的共享指针的引用。从代码设计的角度来看,这已经是太多的引用了(但编译器只是抱怨,因为形成指向引用的指针是非法的)
<>错误信息不起作用,但是C++实现可能是在用引用类型实例化的时候,实现了<代码> STD::SysDypPTR< /Cord>模板,使它成为空类,有点像
template<class T>
class shared_ptr {
// real implementation
};
template<T>
class shared_ptr<T&> {}; // empty class for invalid usage
模板
类共享\u ptr{
//实际执行
};
模板
类共享\u ptr{};//无效用法的空类
不允许您形成指向引用的共享(或其他)指针
或者
void subscribe(std::shared_ptr<StrategyOrderEvents>& strategy)
(最好添加const
正确性)
您当前正在接受对对象引用的共享指针的引用。从代码设计的角度来看,这已经是太多的引用了(但编译器只是抱怨,因为形成指向引用的指针是非法的)
<>错误信息不起作用,但是C++实现可能是在用引用类型实例化的时候,实现了<代码> STD::SysDypPTR< /Cord>模板,使它成为空类,有点像
template<class T>
class shared_ptr {
// real implementation
};
template<T>
class shared_ptr<T&> {}; // empty class for invalid usage
模板
类共享\u ptr{
//实际执行
};
模板
类共享\u ptr{};//无效用法的空类
Im在我的代码中使用std::shred\u ptr。鉴于您显示的代码,此错误毫无意义。您应该执行strategy.get()
,而不是strategy->get()
来访问原始指针。但是无论如何,您都不需要原始指针,所以不要执行任何.get()
,只需策略->m_StrategyName
。。。而且->get()->get()
也是毫无意义的。请确保您显示的错误可以用您显示的代码重现,以便我们能给您一个连贯的答案。@MaxLanghof我编辑代码只是一次尝试,当我执行'strategy->m_StrategyName'时,我得到的是'->'的基本操作数具有非指针类型'std::shared_ptr'“auto p=std::make_pair”(strategy->m_StrategyName,strategy);“你为什么要写这样的代码?你想做什么?我在我的代码上都用std::shred\u ptr这个错误在你展示的代码中没有意义。你应该做strategy.get()
,而不是strategy->get()
访问原始指针。但是您无论如何都不想要原始指针,所以不要执行任何。get()
,只需策略->m_StrategyName
…和->get()->get()
也是毫无意义的。请确保您显示的错误可以与您显示的代码一起复制,以便我们能给您一个连贯的答案。@MaxLanghof我编辑了代码,这是一次尝试,当我执行'strategy->m_StrategyName'im get'时,'->'的基本操作数具有非指针类型'std::shared_ptr'“auto p=std::make_pair”(strategy->m_StrategyName,strategy);“你为什么要写这样的代码?你想做什么?我把它改成‘void subscribe(std::shared_ptr&strategy)’我把它改成‘void subscribe(std::shared_ptr&strategy)’”