Это не совсем пользовательский тип, это просто 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 ++.
Немного сложнее использовать контейнерный класс.