У меня есть класс Array
, который имеет следующий конструктор:
explicit Array(int size = 0, const T &v = T()) {
if (size < 0) {
throw ArrayExceptions::InvalidLength();
}
Array::size = size;
array = new T[size];
insertValueIntoArray(size,v);
}
В каком-то другом классе DataController
У меня есть:
Array<Data> dataArray;
int dataAmount;
explicit DataController(int length) : dataArray(length), dataAmount(length) {}
Но Data.h
нет иметь конструктор без аргументов, поэтому компилятор жалуется на const T &v = T()
из Array.h
:
error: no matching function for call to 'Data::Data()'
Вместо него есть следующий конструктор:
Data(int length) : length(length), /** Other constructor calls ... **/ {}
Что я должен изменить, чтобы заставить Array
использовать конструктор Data(length)
из Data()
? Я могу изменить все файлы.
Я пытался переключить его на:
explicit DataController(int length) : dataArray(length, Data(length)), dataAmount(length) {}
, но затем я получаю ту же ошибку в строке:
array = new T[size];
Минимальная пример:
template<typename T>
class Array {
int size;
T *array;
public:
explicit Array(int size = 0, const T &value = T()) {
Array::size = size;
array = new T[size];
}
~Array() {
delete[] array;
}
};
class Data {
private:
int length;
public:
Data(int length) : length(length) {}
};
class DataController {
private:
Array<Data> dataArray;
int dataAmount;
public:
explicit DataController(int length) : dataArray(length), dataAmount(length) {}
};
Пожалуйста, предлагайте решения без использования std
, если можете.