存储LCD,无需定义
Store an LCD, without defining
我创建了这个类:
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++。
相关文章:
- 在提升multi_index容器中,是否定义了"default index"?
- #定义c-预处理器常量..我做错了什么
- 用C++中的一个变量定义一个常量
- 部分定义/别名模板模板参数
- C++映射:具有自定义类的运算符[]不起作用(总是返回0)
- #为""定义宏;静态";针对不同的上下文
- 如何确保C++函数在定义之前声明(如override关键字)
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 当类在C++中定义时,有什么方法可以"register"类吗?
- 在命名空间中定义函数还是限定函数
- 此代码是否违反一个定义规则
- 编译C++时未定义的引用
- 不同翻译单元中不可重载的非内联函数定义
- 为什么在定义函数之前先声明它
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在类定义之后定义一个私有方法
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- vscode g++链路故障:体系结构x86_64的未定义符号
- 存储LCD,无需定义