1

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

这是我真实代码的一些部分。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 个整数?所以我一定是我做错了什么......

4

1 回答 1

2

错误告诉你到底哪里错了,没有Wave::Wave()办法。您需要Wave该类的默认构造函数才能创建它的数组。Wave如果类包含重要数据,您可能还想创建一个复制赋值运算符。

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


不幸的是,默认的 Arduino C++ 库非常有限,至少在“标准”C++ 功能方面是这样。有一些库可以提供帮助,如果可以使用这样的库,您可以使用 anstd::vector来代替,这将允许您在构造函数 initializer-list 中构造向量:

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

...

LedLamps::LEDLamps(...)
    : waveVector(numberOfWaves, Wave(10,2,25,150,100))
{
}
于 2014-01-22T08:18:52.353 回答