Я работаю над приложением C++, чтобы заполнить массив Bluetooth с некоторой информацией. Он основан на mbed platform BLE_API, но я не думаю, что это должно быть актуальным. У меня есть следующий код, который я пытаюсь перефразировать в функцию.Возвращение целого массива нестандартного типа из функции C++
GattAttribute nameDescr1(BLE_UUID_DESCRIPTOR_CHAR_USER_DESC, (uint8_t *)"Percentage", strlen("Percentage"));
GattAttribute *pdescriptors[] = { &nameDescr1 };
PercentageFill(PercentageUUID, valueBytes.getPointer(),
valueBytes.getNumValueBytes(), HeartRateValueBytes::MAX_VALUE_BYTES,
GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_EXTENDED_PROPERTIES,
pdescriptors,
sizeof(pdescriptors)/sizeof(GattAttribute*)),
Я до сих пор получил это:
GattAttribute produceName (char title[]) {
GattAttribute nameDescr(BLE_UUID_DESCRIPTOR_CHAR_USER_DESC, (uint8_t *)title, strlen(title));
GattAttribute *descriptors[] = { &nameDescr };
return descriptors;
}
Однако, вполне предсказуемо я бросаю ошибку:
Error: No suitable constructor exists to convert from "GattAttribute *[1]" to "GattAttribute"
Я могу понять, почему он бросает, но не являюсь как я должен возвращать весь массив, так как это формат, который требуется в конструкторе «PercentageFill».
Спасибо.
Update:
Чтобы дать полный контекст, вот другие Characteristcis Я настраиваю (каждый с другим именем):
NewService(BLE &_ble, uint8_t percentageFill, uint8_t replacementDue) :
ble(_ble),
valueBytes(percentageFill),
PercentageFill(PercentageUUID, valueBytes.getPointer(),
valueBytes.getNumValueBytes(), HeartRateValueBytes::MAX_VALUE_BYTES,
GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_EXTENDED_PROPERTIES,
pdescriptors,
sizeof(pdescriptors)/sizeof(GattAttribute*)),
Time( TimeUUID,
&replacementDue,
GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_EXTENDED_PROPERTIES,
tdescriptors,
sizeof(tdescriptors)/sizeof(GattAttribute*)),
UseProfile(UseProfileUUID,
&controlPointValue,
GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_EXTENDED_PROPERTIES,
Udescriptors,
sizeof(Udescriptors)/sizeof(GattAttribute*)),) {
setupService();
}
В сообщении об ошибке упоминается «конструктор», который говорит мне, что вы действительно программируете C++. –
Вы уверены, что кодируете в C? Сообщение об ошибке больше похоже на компилятор C++. В C (и, AFAICR, в C++ тоже) вы не можете вернуть массив из функции. Вы можете вернуть указатель (но вы не можете позволить себе вернуть указатель на локальную переменную). Вы можете вернуть структуру, содержащую массив. Но вы не можете вернуть массив напрямую. –
Да, компилятор - это C/C++, поэтому он, вероятно, является C++, в прошлый раз, когда я пометил вопрос как C++, я проголосовал за голосование - я обновлю вопрос –