存储LCD,无需定义

Store an LCD, without defining

本文关键字:定义 LCD 存储      更新时间:2023-10-16

我创建了这个类:

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;
};

正如你所看到的,我想传递一个将在其他地方创建的LCD,但它在这里给我一个错误,因为我不能做"LiquidCrystal_I2C LCD;"而不创建一个新的。我该如何着手解决这个问题?

我要做的就是传递一个到…

下面是我得到的错误:

C:UsersJoshDocumentsArduinolibrariesSerialLoadSerialLoad.cpp: In constructor 'SerialLoad::SerialLoad(int, int, LiquidCrystal_I2C)':
C:UsersJoshDocumentsArduinolibrariesSerialLoadSerialLoad.cpp:5: error: no matching function for call to 'LiquidCrystal_I2C::LiquidCrystal_I2C()'
C:UsersJoshDocumentsArduinolibrariesLiquidCrystal/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:UsersJoshDocumentsArduinolibrariesLiquidCrystal/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:UsersJoshDocumentsArduinolibrariesLiquidCrystal/LiquidCrystal_I2C.h:70: note:                 LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, t_backlighPol)
C:UsersJoshDocumentsArduinolibrariesLiquidCrystal/LiquidCrystal_I2C.h:67: note:                 LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t, uint8_t, uint8_t, uint8_t)
C:UsersJoshDocumentsArduinolibrariesLiquidCrystal/LiquidCrystal_I2C.h:53: note:                 LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t, uint8_t, t_backlighPol)
C:UsersJoshDocumentsArduinolibrariesLiquidCrystal/LiquidCrystal_I2C.h:51: note:                 LiquidCrystal_I2C::LiquidCrystal_I2C(uint8_t)
C:UsersJoshDocumentsArduinolibrariesLiquidCrystal/LiquidCrystal_I2C.h:39: note:                 LiquidCrystal_I2C::LiquidCrystal_I2C(const LiquidCrystal_I2C&)

你的问题真的不是很具体的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对象的地址传递给构造函数。如果您使用new创建LiquidCrystal_I2C,那么您可以简单地执行

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

您必须确保的一件事是,您在类之外创建的LiquidCrystal_I2C在您停止在类中使用它之前不会被销毁,否则您的代码将在您试图在类中访问它的那一刻崩溃。

让我知道这是否有帮助。正如开始所说,这不是arduino特定的,而是纯粹的c++。