Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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++ boost::shared#ptr::shared#ptr(const boost::shared#ptr&;)&x27;隐式声明为已删除_C++_Boost_C++11 - Fatal编程技术网

C++ boost::shared#ptr::shared#ptr(const boost::shared#ptr&;)&x27;隐式声明为已删除

C++ boost::shared#ptr::shared#ptr(const boost::shared#ptr&;)&x27;隐式声明为已删除,c++,boost,c++11,C++,Boost,C++11,问题>我已经看到了帖子。然而,我不知道如何修复它 该问题中提出的解决方案是“将默认的复制构造函数和复制赋值运算符添加到共享\u ptr将解决此问题。”这是较旧版本的boost::shared\u ptr中的一个问题,它与C++11编译器不兼容 最终的C++11标准规定,声明移动构造函数或移动赋值运算符可以防止隐式定义副本构造函数,但较旧版本的boost::shared_ptr不遵守该规则,并假定将隐式定义副本构造函数 您需要升级到Boost 1.48版或更高版本,或者编辑Boost标题以将其添加

问题>我已经看到了帖子。然而,我不知道如何修复它

该问题中提出的解决方案是“将默认的复制构造函数和复制赋值运算符添加到共享\u ptr将解决此问题。”

这是较旧版本的
boost::shared\u ptr
中的一个问题,它与C++11编译器不兼容

最终的C++11标准规定,声明移动构造函数或移动赋值运算符可以防止隐式定义副本构造函数,但较旧版本的
boost::shared_ptr
不遵守该规则,并假定将隐式定义副本构造函数

您需要升级到Boost 1.48版或更高版本,或者编辑Boost标题以将其添加到
共享\u ptr

Compiling the source code....
$g++ -std=c++11 main.cpp -o demo -lm -pthread -lgmpxx -lgmp -lreadline 2>&1
main.cpp: In constructor 'Node::Node(int, boost::shared_ptr)':
main.cpp:9:34: error: use of deleted function 'boost::shared_ptr::shared_ptr(const boost::shared_ptr&)'
In file included from /usr/include/boost/shared_ptr.hpp:17:0,
from main.cpp:2:
/usr/include/boost/smart_ptr/shared_ptr.hpp:168:25: note: 'boost::shared_ptr::shared_ptr(const boost::shared_ptr&)' is implicitly declared as deleted because 'boost::shared_ptr' declares a move constructor or move assignment operator

听起来你有了一个buggy版本的Boost。是禁用C++11支持,还是改用
std::shared_ptr
呢?至少对于boost 1.46.1,您只需要添加复制构造函数。第二行,Definiting operator=,给出了一个编译错误,因为boost显式定义了赋值运算符。在Precision上更新到boost 1.48为我解决了这个问题。它位于默认的系统存储库中,因此您可以假定它是稳定的。如果不看代码,我怀疑1.48是最早的版本。@Elkvis,谢谢。我刚刚检查了1.47.0和1.48.0版本中的代码,修复出现在1.48.0中,所以我更新了答案。
Compiling the source code....
$g++ -std=c++11 main.cpp -o demo -lm -pthread -lgmpxx -lgmp -lreadline 2>&1
main.cpp: In constructor 'Node::Node(int, boost::shared_ptr)':
main.cpp:9:34: error: use of deleted function 'boost::shared_ptr::shared_ptr(const boost::shared_ptr&)'
In file included from /usr/include/boost/shared_ptr.hpp:17:0,
from main.cpp:2:
/usr/include/boost/smart_ptr/shared_ptr.hpp:168:25: note: 'boost::shared_ptr::shared_ptr(const boost::shared_ptr&)' is implicitly declared as deleted because 'boost::shared_ptr' declares a move constructor or move assignment operator
shared_ptr(const shared_ptr&) = default;