C++ 方法调用没有可行的转换std::weak_ptr到std::shared_ptr

C++ 方法调用没有可行的转换std::weak_ptr到std::shared_ptr,c++,c++11,stl,shared-ptr,weak-ptr,C++,C++11,Stl,Shared Ptr,Weak Ptr,我能够转换来回内联 std::shared_ptr<sfg::Notebook> mNotebook = ...; std::weak_ptr<sfg::Notebook> weakNotebook(mNotebook); std::shared_ptr<sfg::Notebook> strongNotebook(weakNotebook); std::shared_ptr mNotebook=。。。; std::弱电笔记本(mNotebook); std:

我能够转换来回内联

std::shared_ptr<sfg::Notebook> mNotebook = ...;
std::weak_ptr<sfg::Notebook> weakNotebook(mNotebook);
std::shared_ptr<sfg::Notebook> strongNotebook(weakNotebook);
std::shared_ptr mNotebook=。。。;
std::弱电笔记本(mNotebook);
std::共享\u ptr strong笔记本(weanknotebook);
当我试图将其传递给一个方法时,会出现以下错误:

"No viable conversion between std::weak_ptr<sfg::Notebook> to std::shared_ptr<sfg::Notebook>."
“std::weak_ptr到std::shared_ptr之间没有可行的转换。”
我正在正常调用该方法,该方法如下所示:

onNotebookLeftClick(weakNotebook);

void onNotebookLeftClick(std::shared_ptr<sfg::Notebook> notebook) {
}
onNotebookLeftClick(weanknotebook);
void onNotebookLeftClick(标准::共享笔记本){
}
我正在使用OSX(10.10.2)。

您试图使用的是
显式的

template< class Y >
explicit shared_ptr( const std::weak_ptr<Y>& r );

要修复错误,请执行以下操作之一

onNotebookLeftClick(std::shared_ptr<sfg::Notebook>{weakNotebook});
请注意,这两种方法之间存在差异。如果
弱\u ptr
有,第一个解决方案将抛出
std::bad\u弱\u ptr
,而在这种情况下,第二个选项将构造一个空的
共享\u ptr

std::shared_ptr<sfg::Notebook> strongNotebook = weakNotebook; // this will fail
onNotebookLeftClick(std::shared_ptr<sfg::Notebook>{weakNotebook});
onNotebookLeftClick(weakNotebook.lock());