Arduino:在构造函数中初始化自定义对象

时间:2014-01-22 08:13:53

标签: c++ arrays constructor arduino arduino-ide

我创建了1个包含2个类的库。类波和类LEDLamp。在第二类构造函数中,我试图填充一组第一类对象而没有任何运气。

以下是我的真实代码的一些部分。 h文件:

static const int numberOfWaves = 20;

class Wave
{
public:
    Wave(int speed, int blockSize, int ledCount, int lightness,int startCount); // Constructor

private:

};

// ------------------------------------------------------------------------------------------- //
class LEDLamps
{
public:
    LEDLamps(int8_t lampCount, int8_t dataPin, int8_t clockPin); //Constructor

private:
    Wave waveArray[numberOfWaves];
};

.cpp文件

Wave::Wave(int speed, int blockSize, int ledCount, int lightness, int startCount) //Constructor
{ 
           // Doing some stuff...
}

// ------------------------------------------------------------------------------------------- //
LEDLamps::LEDLamps(int8_t lampCount, int8_t dataPin, int8_t clockPin) //Constructor
{ 
    int i;
    for (i = 0; i < numberOfWaves; i++) {
        waveArray[i] = Wave(10,2,25,150,100);
    }
}

错误讯息:

LEDLamps.cpp: In constructor 'LEDLamps::LEDLamps(int8_t, int8_t, int8_t)':
LEDLamps.cpp:66: error: no matching function for call to 'Wave::Wave()'
LEDLamps.cpp:14: note: candidates are: Wave::Wave(int, int, int, int, int)
LEDLamps.h:23: note:                 Wave::Wave(const Wave&)

我从错误消息中理解参数是错误的但是我发送5个整数并且构造函数被定义为接收5个整数?所以我一定是别的,我做错了......

1 个答案:

答案 0 :(得分:2)

错误告诉您确切的错误,没有Wave::Wave()方法。您需要Wave类的默认构造函数才能创建它的数组。如果Wave类包含非平凡数据,您可能还想创建一个复制赋值运算符。

问题是数组是在LEDLamps构造函数的主体运行之前构造的,所以当在LEDLamps构造函数体内部时,数组是完全构造的,以及你正在做的是赋值(使用自动生成的拷贝赋值运算符)。


不幸的是,默认的Arduino C ++库非常有限,至少在涉及“标准”C ++功能时。有libraries that helps,如果可以使用这样的库,你可以使用std::vector代替,这将允许你在构造函数初始化列表中构造向量:

class LEDLamps
{
    ...
    std::vector<Wave> waveVector;
};

...

LedLamps::LEDLamps(...)
    : waveVector(numberOfWaves, Wave(10,2,25,150,100))
{
}