Создание публичного экземпляра класса при инициализации другого класса

c++ object-oriented

Я использую несколько дисплеев 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? Это кажется довольно запутанным.

, 👍2


1 ответ


Лучший ответ:

4

Как и в первом примере, это локальная переменная в конструкторе таймера.

Во втором случае вам придется использовать список инициализаторов членов в конструкторе, поскольку в вашем классе отображения нет конструктора по умолчанию.

class Timer {
public:
    Timer(uint8_t CLK, uint8_t DIO)
    : display(CLK, DIO) // список инициализаторов конструктора
    {
        ...
    }
    void updateDisplay() {
        ...
        display.setSegments(displayData);
    }

    // переменная-член:
    TM1637Display display;
}
,