调用类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是自定义类型,它们的库已包含在内。
由于您没有提供完整的代码示例,因此,我仍然可以告诉我发生了什么问题。
您的构造函数的定义是这样写的:
VS1838B::VS1838B(int pinIR)
{
// stuff
}
不管是什么// stuff
,编译器实际上都会插入代码...
VS1838B::VS1838B(int pinIR)
// <--- here
{
// stuff
}
它在同一位置按顺序调用您的类中每个非POD类型的实例的default-constructor(您没有专门对其进行初始化)。
因为您没有初始化_receptorIR
,它正在插入一个default-constructor调用,因此您的构造函数实际上如下所示:
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的构造函数,您甚至没有发布它的原型。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句