Входной параметр setData()
является ссылкой на неконстантный указатель на const std::vector
. Но объект std::vector
, на который вы указываете, не является const
.
Нет смысла использовать указатель вообще в этой ситуации. Измените setData()
, чтобы вместо этого взять std::vector
по ссылке:
template <class T>
void ArrayT<T>::setData(const std::vector<T> &data)
{
buffer.assign(data.begin(), data.end());
// or simply: buffer = data;
}
vector<float> vec(3, 1.0);
Array<float> obj;
obj.setData(vec);
При этом, если вы хотите сохранить указатель, вам нужно сбросить const
:
template <class T>
void ArrayT<T>::setData(std::vector<T> * data_ptr)
{
buffer.assign(data_ptr->begin(), data_ptr->end());
// or simply: buffer = *data_ptr;
}
Или, по крайней мере, переместите const
после *
, чтобы сделать указатель const
вместо объекта, на который он указывает:
template <class T>
void ArrayT<T>::setData(std::vector<T> * const data_ptr)
{
buffer.assign(data_ptr->begin(), data_ptr->end());
// or simply: buffer = *data_ptr;
}
В любом случае, обратите внимание, я удалил ссылку. Нет веской причины для передачи указателя по ссылке, когда вы не изменяете то, на что указывает указатель. Вместо этого передайте указатель по значению.