没有匹配的函数错误C ++构造函数

时间:2015-07-26 23:57:40

标签: c++ class constructor

调用类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是自定义类型,它们的库已包含在内。

2 个答案:

答案 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类没有提供一个参数构造函数,你应该提供它。