调用类VS1838B的构造函数时,我收到以下错误消息
error: no matching function for call to ‘IRrecv::IRrecv()’
VS1838B::VS1838B(int pinoReceptorIR){
^
这是VS1838B类标题的一部分:
#ifndef INFRAREDRECEIVERVS1838B_H
#define INFRAREDRECEIVERVS1838B_H
#include "Arduino.h"
#include "IRremote.h"
#include "IRremoteInt.h"
class VS1838B{
public:
//Constructor
VS1838B(int pinIR);
//Atributes
int _pinInput;
IRrecv _receptorIR;
decode_results _buffer;
};
#endif /* INFRAREDRECEIVERVS1838B_H */
这是同一个班级的cpp的一部分:
#include "Arduino.h"
#include "InfraRedReceiverVs1838b.h"
#include "IRremote.h"
#include "IRremoteInt.h"
VS1838B::VS1838B(int pinIR){
_pinInput = pinIR;
IRrecv receptorIR(_pinInput);
decode_results buffer;
_receptorIR = receptorIR;
_buffer = buffer;
}
注意:IRrecv和decode_results是自定义类型,它们的库已包含在内。
答案 0 :(得分:2)
由于没有提供完整的代码示例,我会解释错误,因为我仍然可以告诉你。
你的构造函数的定义是这样写的:
VS1838B::VS1838B(int pinIR)
{
// stuff
}
无论// stuff
是什么,编译器都会实际插入代码......
VS1838B::VS1838B(int pinIR)
// <--- here
{
// stuff
}
在同一个地方按顺序调用类中每个非POD类型实例的默认构造函数。
因为你没有初始化_receptorIR
,所以它插入了一个默认构造函数调用,所以构造函数REALLY看起来像这样:
VS1838B::VS1838B(int pinIR)
: _receptorID () // ERROR: No default initializer!
, _buffer () // assuming _buffer is non-POD
{
// stuff
}
但是,_receptorID
显然没有可访问的默认构造函数。
你应该这样做:
VS1838B::VS1838B(int pinIR)
: _pinInput ( pinIR )
, _receptorID ( pinIR )
, _buffer ()
{
// stuff
// Note: you actually don't need to put ANYTHING you
// wrote in your example here because the initializer-list
// above did it all for you.
}
但严重的是,发布整个代码。错误是IRrecv的构造函数清楚,你甚至没有发布它的原型。
答案 1 :(得分:0)
IRrecv receptorIR(_pinInput);
IRrecv
类没有提供一个参数构造函数,你应该提供它。