Карта повышения общего PTR

В моем классе есть карта в качестве члена. Проблема в том, что значением этой карты является boost::shared_ptr. Когда я пытаюсь вставить какой-то элемент в карту, возникает какая-то недоброжелательная ошибка компиляции. вот часть моего исходного кода: header:

class Chi2Analyzer: public BaseAlgorithm{

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

HistogramsMap h_map;

.cpp:

Chi2Analyzer::Chi2Analyzer()
{
    // initialization of the map
    /////////////////////////////////////////////////////////////////
    // chi2
    std::string histogramName="chi2PerDof";
    boost::shared_ptr<TH1D> histogram;
    histogram.reset(new TH1D(histogramName.c_str(),histogramName.c_str(), 100,0,1.6e6) );
    h_map[histogramName]=histogram;

и вывод 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

Что мне делать, чтобы исправить эти ошибки. С уважением


person user1877600    schedule 28.04.2014    source источник
comment
Ваша версия Boost не совсем правильно поддерживает материал С++ 11. Обновите до 1.53 или выше.   -  person David Schwartz    schedule 28.04.2014
comment
по какой причине вы используете версии boost::shared_ptr и boost::unordered_map, а не версии std?   -  person Chris Drew    schedule 28.04.2014
comment
Если ваш компилятор поддерживает C++11, почему бы вам не использовать std::shared_ptr?   -  person 101010    schedule 28.04.2014
comment
Похоже, конструктор копирования boost::shared_ptr по какой-то причине помечен как удаленный (т. е. объекты boost::shared_ptr не предназначены для копирования). Вероятно, он жалуется на h_map[histogramName] = histogram;, потому что для того, чтобы histogram можно было вставить в h_map, его нужно скопировать, и, следовательно, должен быть вызван конструктор удаленной копии boost::shared_ptr.   -  person 101010    schedule 28.04.2014
comment
Как упомянул @DavidSchwartz, это, вероятно, связано с используемой вами версией boost stackoverflow.com/questions/11302758/   -  person 101010    schedule 28.04.2014
comment
Это может быть проблема с вашим классом TH1D, как вы копируете TH1D?   -  person praks411    schedule 28.04.2014
comment
возможный дубликат boost::shared_ptr::shared_ptr(const boost::shared_ptr& )' неявно объявляется удаленным   -  person Jonathan Wakely    schedule 28.04.2014
comment
@DavidSchwartz Спасибо! Я установил новейшую версию Boost, и этот шаг решил мои проблемы.   -  person user1877600    schedule 30.04.2014