ArrayHolderHolder<T>::setArrays(T firstarray[],T secondarray[] ,int N1, int N2)
^^^^^^^^^^^^^^^^^
Вот одна опечатка.Имя класса ArrayHolder
, а не ArrayHolderHolder
.Кроме того, вы не записали возвращаемый тип .
Поскольку вы не можете передать массив (по значению), лучше использовать функцию обозначения указателя в списке параметров, и так какШаблон класса, предпочитаете определять функции в самом классе:
template<typename T>
class ArrayHolder
{
public:
ArrayHolder();
void setArrays(T *firstarray,T *secondarray ,int N1, int N2)
{
array1 = new T[N1];
array2 = new T[N2];
//if you want to copy, then use `std::copy` as:
std::copy(firstarray, firstarray + N1, array1);
std::copy(secondarray, secondarray + N2, array2);
}
private:
T *array1;
T *array2;
};
Кстати, вместо необработанных массивов вы можете использовать st::vector
как:
std::vector<T> array1;
std::vector<T> array2;
И то же самое всписок параметров setArrays
также.Если вы сделаете это, то setArray
станет следующим:
void setArrays(const std::vector<T> & first, const std::vector<T> & second)
{
//maybe you need to do this!
array1.clear();
array2.clear();
array1.insert(array1.end(), first.begin(), first.end());
array2.insert(array2.end(), second.begin(), second.end());
}
Прост, не так ли?Нет выделения памяти, нет освобождения!
Или, что еще лучше, если вы принимаете аргументы по значению, вы можете написать так:
void setArrays(std::vector<T> first, std::vector<T> second)
{
//no need to clear!
array1.swap(first);
array2.swap(second);
}
Последняя реализация - идиоматическое решение, предпочитаемоеБиблиотека реализации.