C++开发Arduino库调用DS3904构造器报无匹配函数错误
错误原因
- C++ 类的非静态成员对象的构造函数只能在构造函数初始化列表中调用,进入构造函数的函数体(大括号内部)时,所有成员对象已经完成默认构造流程。你写在函数体中的
_digipot(digipotAddress, 2);不是调用DS3904的构造函数,而是试图调用DS3904类重载的operator()(函数调用运算符),该库没有实现对应的运算符重载,因此触发匹配失败的报错。 - 你当前的写法下,
_digipot成员会先尝试调用DS3904的无参默认构造函数,而你引入的DS3904库没有提供无参构造函数,即便没有函数调用运算符的报错,也会触发找不到无参构造的编译错误。
解决方案
将_digipot的初始化放到Cell构造函数的初始化列表中即可,修改后的Cell.cpp代码如下:
#include "Arduino.h" #include "Cell.h" Cell::Cell(int cellNumber, int digipotAddress, int resistorAddress) : _digipot(digipotAddress, 2), _cellNo(cellNumber), _resistorAddress(resistorAddress) { // 构造函数体内部可留空,所有成员已经在初始化列表完成构造 }
内容的提问来源于stack exchange,提问作者Vijay Shastri
相关产品推荐
相关产品推荐

