Создание публичного экземпляра класса при инициализации другого класса
Я использую несколько дисплеев TM1637 для создания таймеров, поэтому решил создать класс Timer. Каждый раз при инициализации экземпляра класса Timer я хочу, чтобы он создавал экземпляр класса TM1637Display. Я начал с этого, но к объекту дисплея нельзя получить доступ из updateDisplay.
class Timer {
public:
Timer(uint8_t CLK, uint8_t DIO) {
TM1637Display display(CLK, DIO);
...
}
void updateDisplay() {
...
display.setSegments(displayData);
}
}
И если я это сделаю, то получу ошибку времени компиляции В конструкторе 'Timer::Timer(uint8_t, uint8_t)': src\main.cpp:16:37: ошибка: нет соответствующей функции для вызова 'TM1637Display::TM1637Display()'
TM1637Display display;
Timer(uint8_t CLK, uint8_t DIO) {
display(CLK, DIO);
...
}
Что мне попробовать? Может быть, создать пустой указатель до создания экземпляра дисплея с публичной областью действия, назначить указатель экземпляру дисплея, а затем передать указатель функции updateDisplay? Это кажется довольно запутанным.
@ahalekelly, 👍2
1 ответ
Лучший ответ:
Как и в первом примере, это локальная переменная в конструкторе таймера.
Во втором случае вам придется использовать список инициализаторов членов в конструкторе, поскольку в вашем классе отображения нет конструктора по умолчанию.
class Timer {
public:
Timer(uint8_t CLK, uint8_t DIO)
: display(CLK, DIO) // список инициализаторов конструктора
{
...
}
void updateDisplay() {
...
display.setSegments(displayData);
}
// переменная-член:
TM1637Display display;
}
- Доступ к функции в объекте через `->` приводит к сбою (сбросу) Arduino
- Проблемы с передачей объектов в древовидной структуре
- C++ против языка Arduino?
- Как использовать SPI на Arduino?
- Какие накладные расходы и другие соображения существуют при использовании структуры по сравнению с классом?
- Ошибка: expected unqualified-id before 'if'
- Что лучше использовать: #define или const int для констант?
- Библиотека DHT.h не импортируется