Arduino: инициализировать пользовательский объект в конструкторе

Я создал 1 библиотеку с 2 классами. Класс Wave и класс LEDLamps. В конструкторе второго класса я пытаюсь заполнить массив объектов первого класса без какой-либо удачи.

Вот некоторые части моего реального кода.
h файл:

static const int numberOfWaves = 20;

class Wave
{
public:
Wave(int speed, int blockSize, int ledCount, int lightness,int startCount); // Constructor

private:

};

// ------------------------------------------------------------------------------------------- //
class LEDLamps
{
public:
LEDLamps(int8_t lampCount, int8_t dataPin, int8_t clockPin); //Constructor

private:
Wave waveArray[numberOfWaves];
};

.файл cpp

Wave::Wave(int speed, int blockSize, int ledCount, int lightness, int startCount) //Constructor
{
// Doing some stuff...
}

// ------------------------------------------------------------------------------------------- //
LEDLamps::LEDLamps(int8_t lampCount, int8_t dataPin, int8_t clockPin) //Constructor
{
int i;
for (i = 0; i < numberOfWaves; i++) {
waveArray[i] = Wave(10,2,25,150,100);
}
}

Сообщения об ошибках:

LEDLamps.cpp: In constructor 'LEDLamps::LEDLamps(int8_t, int8_t, int8_t)':
LEDLamps.cpp:66: error: no matching function for call to 'Wave::Wave()'
LEDLamps.cpp:14: note: candidates are: Wave::Wave(int, int, int, int, int)
LEDLamps.h:23: note:                 Wave::Wave(const Wave&)

Что я понимаю из этого сообщения об ошибке, параметры неверны, но я посылаю 5 целых чисел, и конструктор определен для получения 5 целых чисел? Так что я должен быть чем-то другим, я делаю не так …

1

Решение

Ошибка говорит точно, что не так, нет Wave::Wave() метод. Вам нужен конструктор по умолчанию для Wave класс, чтобы иметь возможность создать его массив. Вы также можете создать оператор копирования-назначения, если Wave класс содержит нетривиальные данные.

Проблема в том, что массив построен до тело LEDLamps конструктор работает, поэтому, когда внутри LEDLamps тело конструктора: массив полностью создан, и вы выполняете присваивание (используя автоматически сгенерированный оператор копирования-присваивания).


К сожалению, библиотека Arduino C ++ по умолчанию довольно ограничена, по крайней мере, когда речь идет о «стандартных» возможностях C ++. Есть библиотеки, которые помогают, и если есть возможность использовать такую ​​библиотеку, вы могли бы использовать std::vector вместо этого, что позволит вам построить вектор в списке инициализатора конструктора:

class LEDLamps
{
...
std::vector<Wave> waveVector;
};

...

LedLamps::LEDLamps(...)
: waveVector(numberOfWaves, Wave(10,2,25,150,100))
{
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector