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

C++ Arduino:在构造函数中初始化自定义对象,c++,arrays,constructor,arduino,arduino-ide,C++,Arrays,Constructor,Arduino,Arduino Ide,我已经创建了一个包含2个类的库。类波浪灯和类LED灯。在第二个类构造函数中,我试图在没有任何运气的情况下填充一组第一类对象 下面是我真正的代码的一些部分。 h文件: .cpp文件 Wave::Wave(int speed, int blockSize, int ledCount, int lightness, int startCount) //Constructor { // Doing some stuff... } // ---------------------

我已经创建了一个包含2个类的库。类波浪灯和类LED灯。在第二个类构造函数中,我试图在没有任何运气的情况下填充一组第一类对象

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

.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);
    }
}

我从那个错误消息中了解到,参数是错误的,但是我发送了5个整数,构造函数被定义为接收5个整数?所以我肯定是做错了什么…

这个错误告诉你到底是什么错了,没有
Wave::Wave()
方法。您需要
Wave
类的默认构造函数才能创建它的数组。如果
Wave
类包含非平凡数据,您可能还需要创建一个复制赋值操作符

问题在于数组是在
LED灯
构造器主体运行之前构造的,因此当
LED灯
构造器主体内部时,数组是完全构造的,您所做的是赋值(使用自动生成的复制赋值操作符)


遗憾的是,默认的ARDIONC++ C++库非常有限,至少在“标准”C++特性上是如此。有,如果可以使用这样的库,您可以使用
std::vector
,这将允许您在构造函数初始值设定项列表中构造向量:

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

...

LedLamps::LEDLamps(...)
    : waveVector(numberOfWaves, Wave(10,2,25,150,100))
{
}
类LED灯
{
...
矢量波矢量;
};
...
LED灯::LED灯(…)
:波矢量(波数,波(10,2,25150100))
{
}
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&)
class LEDLamps
{
    ...
    std::vector<Wave> waveVector;
};

...

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