传递Adafruit_PCD8544对象至类构造器报错:无匹配默认构造函数
解决Adafruit_PCD8544构造函数匹配错误问题
错误原因分析
报错error: no matching function for call to Adafruit_PCD8544::Adafruit_PCD8544()的核心原因是:
你的UI_Nokia5110类中私有成员Adafruit_PCD8544 display在类实例化时,会优先调用无参构造函数完成初始化,但Adafruit_PCD8544库并未提供无参构造方法,因此编译器报错。
解决方案(推荐引用方式)
1. 修改UI.h头文件
将私有成员改为引用类型,并移除无参构造函数(引用必须绑定对象,无法默认初始化):
#ifndef UI_WEATHER_API_H #define UI_WEATHER_API_H #include <Arduino.h> #include <SPI.h> #include <Adafruit_GFX.h> #include <Adafruit_PCD8544.h> class UI_Nokia5110{ private: Adafruit_PCD8544 &display; // 改为引用类型 public: UI_Nokia5110(Adafruit_PCD8544 &display); // 仅保留带参构造 }; #endif
2. 修改UI.cpp实现文件
使用构造函数初始化列表绑定引用,避免默认初始化:
#include "UI_Nokia5110.h" // 初始化列表绑定传入的display引用 UI_Nokia5110::UI_Nokia5110(Adafruit_PCD8544 &display) : display(display) { // 此处无需额外赋值操作 }
为什么这样有效?
- 引用类型成员必须在构造函数初始化阶段完成绑定,不会触发
Adafruit_PCD8544的无参构造调用,直接复用外部已初始化的display对象。 - 避免了对象拷贝,减少内存开销,同时保证UI类操作的是同一个LCD实例。
内容的提问来源于stack exchange,提问作者sorianoArtal
相关产品推荐
相关产品推荐

