Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/136.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共享ptr图_C++_Boost_Shared Ptr_Stdmap - Fatal编程技术网

C++ boost共享ptr图

C++ boost共享ptr图,c++,boost,shared-ptr,stdmap,C++,Boost,Shared Ptr,Stdmap,我的班级有一张地图作为成员。问题是这个映射的值是boost::shared_ptr。 当我试图在映射中插入一些元素时,发生了一些不友好的编译错误。 以下是我的部分资源代码: 标题: class Chi2Analyzer: public BaseAlgorithm{ typedef boost::unordered_map<std::string, boost::shared_ptr<TH1D> > HistogramsMap; /* ... */ private: H

我的班级有一张地图作为成员。问题是这个映射的值是boost::shared_ptr。 当我试图在映射中插入一些元素时,发生了一些不友好的编译错误。 以下是我的部分资源代码: 标题:

class Chi2Analyzer: public BaseAlgorithm{

typedef boost::unordered_map<std::string, boost::shared_ptr<TH1D> > HistogramsMap; /* ... */
private:

HistogramsMap h_map;
class-Chi2Analyzer:public-BaseAlgorithm{
typedef boost::无序映射historogrammap;/**/
私人:
HistogramsMap h_图;
.cpp:

Chi2Analyzer::Chi2Analyzer()
{
//地图的初始化
/////////////////////////////////////////////////////////////////
//chi2
std::string historogramname=“chi2PerDof”;
boost::共享的ptr直方图;
重置(新的TH1D(histogramName.c_str(),histogramName.c_str(),100,0,1.6e6));
h_图[histogramName]=直方图;
和g++输出:

In file included from /usr/include/boost/shared_ptr.hpp:17:0,
                 from src/../Include/NTupleHandler.h:11,
                 from src/../Include/BaseAlgorithm.h:5,
                 from src/../Include/Chi2Analyzer.h:5,
                 from src/Chi2Analyzer.cpp:2:
/usr/include/boost/smart_ptr/shared_ptr.hpp: In instantiation of ‘boost::shared_ptr< <template-parameter-1-1> >& boost::shared_ptr< <template-parameter-1-1> >::operator=(const boost::shared_ptr< <template-parameter-1-1> >&) [with T = TH1D]’:
src/Chi2Analyzer.cpp:19:22:   required from here
/usr/include/boost/smart_ptr/shared_ptr.hpp:305:9: error: use of deleted function ‘boost::shared_ptr<TH1D>::shared_ptr(const boost::shared_ptr<TH1D>&)’
         this_type(r).swap(*this);
         ^
/usr/include/boost/smart_ptr/shared_ptr.hpp:168:25: note: ‘boost::shared_ptr<TH1D>::shared_ptr(const boost::shared_ptr<TH1D>&)’ is implicitly declared as deleted because ‘boost::shared_ptr<TH1D>’ declares a move constructor or move assignment operator
 template<class T> class shared_ptr
                         ^
make: *** [Chi2Analyzer.o] Error 1
在/usr/include/boost/shared_ptr.hpp:17:0中包含的文件中,
从src/./Include/NTupleHandler.h:11,
来自src/./Include/BaseAlgorithm.h:5,
来自src/./Include/Chi2Analyzer.h:5,
来自src/Chi2Analyzer.cpp:2:
/usr/include/boost/smart_ptr/shared_ptr.hpp:boost::shared_ptr<>&boost::shared_ptr<>>的实例化中:operator=(const boost::shared_ptr<>&)[带T=TH1D]:
src/Chi2Analyzer.cpp:19:22:此处需要
/usr/include/boost/smart_ptr/shared_ptr.hpp:305:9:错误:使用删除的函数'boost::shared_ptr::shared_ptr(const boost::shared_ptr&)'
此类型(r).交换(*此);
^
/usr/include/boost/smart_ptr/shared_ptr.hpp:168:25:注意:“boost::shared_ptr::shared_ptr(const boost::shared_ptr&)”被隐式声明为已删除,因为“boost::shared_ptr”声明了移动构造函数或移动赋值运算符
模板类共享\u ptr
^
make:**[Chi2Analyzer.o]错误1
我应该做什么来修复此错误。
致以最诚挚的问候

您的Boost版本不太支持c++11格式。请升级到1.53或更高版本。您使用
Boost::shared_ptr
Boost::unordered_map
而不是
std
版本的原因是什么?如果您的编译器支持c++11,为什么不使用
std::shared_ptr
?它看起来像是由于某种原因,
boost::shared_ptr
的结构被标记为已删除(即,
boost::shared_ptr
对象不打算复制)。它可能会抱怨
h_映射[HistorogramName]=直方图;
因为为了将
直方图插入
h_map
中,必须复制它,因此必须调用
boost::shared_ptr
的已删除复制构造函数。正如@DavidSchwartz所提到的,它可能与您正在使用的boost版本有关
In file included from /usr/include/boost/shared_ptr.hpp:17:0,
                 from src/../Include/NTupleHandler.h:11,
                 from src/../Include/BaseAlgorithm.h:5,
                 from src/../Include/Chi2Analyzer.h:5,
                 from src/Chi2Analyzer.cpp:2:
/usr/include/boost/smart_ptr/shared_ptr.hpp: In instantiation of ‘boost::shared_ptr< <template-parameter-1-1> >& boost::shared_ptr< <template-parameter-1-1> >::operator=(const boost::shared_ptr< <template-parameter-1-1> >&) [with T = TH1D]’:
src/Chi2Analyzer.cpp:19:22:   required from here
/usr/include/boost/smart_ptr/shared_ptr.hpp:305:9: error: use of deleted function ‘boost::shared_ptr<TH1D>::shared_ptr(const boost::shared_ptr<TH1D>&)’
         this_type(r).swap(*this);
         ^
/usr/include/boost/smart_ptr/shared_ptr.hpp:168:25: note: ‘boost::shared_ptr<TH1D>::shared_ptr(const boost::shared_ptr<TH1D>&)’ is implicitly declared as deleted because ‘boost::shared_ptr<TH1D>’ declares a move constructor or move assignment operator
 template<class T> class shared_ptr
                         ^
make: *** [Chi2Analyzer.o] Error 1