Хранить LCD, не определяя

У меня есть этот класс, который я делаю:

class SerialLoad {
public:
SerialLoad(int line, int total, LiquidCrystal_I2C lcd);
void increment();
void print();
void clearLine();
private:
int line;
int current;
int total;
int percent;
LiquidCrystal_I2C lcd;
};

И, как вы можете видеть, я хочу передать ЖК-дисплей, который будет создан в другом месте, но он дает мне ошибку здесь, потому что я не могу сделать «LiquidCrystal_I2C lcd;» без создания нового. Как мне исправить это?

Что я хочу сделать, это просто передать один в …

Вот ошибка, которую я получаю:

C:\Users\Josh\Documents\Arduino\libraries\SerialLoad\SerialLoad.cpp: In constructor 'SerialLoad::SerialLoad(int, int, LiquidCrystal_I2C)':
C:\Users\Josh\Documents\Arduino\libraries\SerialLoad\SerialLoad.cpp:5: error: no matching function for call to 'LiquidCrystal_I2C::LiquidCrystal_I2C()'
C:\Users\Josh\Documents\Arduino\libraries\LiquidCrystal/LiquidCrystal_I2C.h:93: note: candidates are: LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, t_backlighPol)
C:\Users\Josh\Documents\Arduino\libraries\LiquidCrystal/LiquidCrystal_I2C.h:89: note:                 LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t)
C:\Users\Josh\Documents\Arduino\libraries\LiquidCrystal/LiquidCrystal_I2C.h:70: note:                 LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, t_backlighPol)
C:\Users\Josh\Documents\Arduino\libraries\LiquidCrystal/LiquidCrystal_I2C.h:67: note:                 LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t, uint8_t, uint8_t, uint8_t)
C:\Users\Josh\Documents\Arduino\libraries\LiquidCrystal/LiquidCrystal_I2C.h:53: note:                 LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t, uint8_t, t_backlighPol)
C:\Users\Josh\Documents\Arduino\libraries\LiquidCrystal/LiquidCrystal_I2C.h:51: note:                 LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t)
C:\Users\Josh\Documents\Arduino\libraries\LiquidCrystal/LiquidCrystal_I2C.h:39: note:                 LiquidCrystal_I2C::LiquidCrystal_I2C(const LiquidCrystal_I2C&)

0

Решение

Ваш вопрос на самом деле не очень специфичен для Arduino, но это очень общий вопрос C ++.
Чтобы сохранить объект, созданный вне вашего класса, вы можете, например, хранить указатель на объект, так что вместо того, чтобы

LiquidCrystal_I2C lcd;

у тебя должно быть

LiquidCrystal_I2C *lcd;

В конструкторе вашего класса вы должны соответствующим образом изменить вещи и назначить указатель на член вашего класса.

SerialLoad(int line, int total, LiquidCrystal_I2C *outsideLcd)
{
lcd = outsideLcd;
}

Еще пара комментариев:
В зависимости от того, как вы создаете LiquidCrystal_I2C объект, вам нужно передать его по-другому в классе.

Если вы делаете

LiquidCrystal_I2C lcd;

ты должен сделать

SerialLoad s([other variables here], &lcd);

Это означает, что вы передаете адрес lcd возражать против вашего конструктора.
Если вы создаете LiquidCrystal_I2C с новый, тогда вы можете просто сделать

SerialLoad s([other variables here], lcd);

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

Позвольте мне знать, если это помогает. Как было сказано в начале, это вовсе не специфично для Arduino, а чисто для C ++.

0

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


По вопросам рекламы [email protected]