我创建了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个整数?所以我一定是别的,我做错了......
答案 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))
{
}