В моем классе есть карта в качестве члена. Проблема в том, что значением этой карты является 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
Что мне делать, чтобы исправить эти ошибки. С уважением
boost::shared_ptr
иboost::unordered_map
, а не версииstd
? - person Chris Drew   schedule 28.04.2014std::shared_ptr
? - person 101010   schedule 28.04.2014boost::shared_ptr
по какой-то причине помечен как удаленный (т. е. объектыboost::shared_ptr
не предназначены для копирования). Вероятно, он жалуется наh_map[histogramName] = histogram;
, потому что для того, чтобыhistogram
можно было вставить вh_map
, его нужно скопировать, и, следовательно, должен быть вызван конструктор удаленной копииboost::shared_ptr
. - person 101010   schedule 28.04.2014