Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何从共享ptr的引用中提取数据<;T&&燃气轮机;_C++_C++14_Shared Ptr - Fatal编程技术网

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)’”