我用于Arduino项目OneWire library和Dallas one。这定义了一种DeviceAddress
类型,可以包含OneWire设备地址。我想创建一个数组来存储我的设备地址,因此可以在它们上循环。
以下内容无法编译
DeviceAddress waterTempSensorAddress = { 0x28, 0xCA, 0x98, 0xCF, 0x05, 0x0, 0x0, 0x51 };
DeviceAddress heatWaterSystemTemSensorAddress = { 0x28, 0xC4, 0xA8, 0xCF, 0x05, 0x0, 0x0, 0xC6 };
DeviceAddress test[] = { waterTempSensorAddress, heatWaterSystemTemSensorAddress };
错误是:
pool_manager:62: error: array must be initialized with a brace-enclosed initializer
DeviceAddress test[] = { waterTempSensorAddress, heatWaterSystemTemSensorAddress };
^
是否可以为此声明一个类似Arduino的数组?我应该考虑使用其他结构吗?
谢谢
答案 0 :(得分:0)
这不是真正的自定义类型,它只是typedef uint8_t DeviceAddress[8];
,数组不能像类一样进行复制构造。
基本上,您可以通过两种简单的方法来做到这一点:
// #1
DeviceAddress test[] = { { 0x28, 0xCA, 0x98, 0xCF, 0x05, 0x0, 0x0, 0x51 }, { 0x28, 0xC4, 0xA8, 0xCF, 0x05, 0x0, 0x0, 0xC6 } };
// and eventually you can define:
DeviceAddress *waterTempSensorAddress = test;
DeviceAddress *heatWaterSystemTemSensorAddress = test + 1;
但这不是很好。
另一种方法是使用指针:
// #2
DeviceAddress waterTempSensorAddress = { 0x28, 0xCA, 0x98, 0xCF, 0x05, 0x0, 0x0, 0x51 };
DeviceAddress heatWaterSystemTemSensorAddress = { 0x28, 0xC4, 0xA8, 0xCF, 0x05, 0x0, 0x0, 0xC6 };
DeviceAddress * test2[] = { &waterTempSensorAddress, &heatWaterSystemTemSensorAddress };
第一个更易于使用,第二个更不易读:
void da(DeviceAddress const& addr) { /* .... */ }
void something() {
da(test[0]); // #1
da(*(test2[0])); // #2
da(test2[0][0]); // #2 (it's basically two dimensional array of DeviceAddress)
}
无论如何,这都是关于C ++基础知识的。
更难的方法是使用容器类。