Ошибка компиляции ESP32 scanNetworks: вызов перегруженного 'BSSID(int)' неоднозначен
Я пытаюсь запустить следующий код:
#include <WiFi.h>
void setup() {
//int16_t scanNetworks(bool async = false, bool show_hidden = false, bool passive = false, uint32_t max_ms_per_chan = 300, uint8_t channel = 0, const char * ssid=nullptr, const uint8_t * bssid=nullptr);
int n = WiFi.scanNetworks(true, false, false, 5, 7, "HTM");
Serial.begin(115200);
delay(10); // Minimum 10 milliseonds delay required to reliably receive message from Gateway.
for (int i = 0; i < 4; i++)
{
uint8_t values[4];
values[i] = WiFi.BSSID(0)[i];
}
}
void loop() { }
но я получаю ошибку компиляции Arduino (вызов перегруженного 'BSSID(int)' неоднозначен):
C:\Users\ebhynes\AppData\Local\Temp\arduino_modified_sketch_647803\sketch_apr04a.ino: In function 'void setup()':
sketch_apr04a:17:29: error: call of overloaded 'BSSID(int)' is ambiguous
17 | values[i] = WiFi.BSSID(0)[i];
| ~~~~~~~~~~^~~
In file included from C:\Users\ebhynes\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.2.0\libraries\WiFi\src/WiFi.h:34,
from C:\Users\ebhynes\AppData\Local\Temp\arduino_modified_sketch_647803\sketch_apr04a.ino:1:
C:\Users\ebhynes\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.2.0\libraries\WiFi\src/WiFiSTA.h:171:12: note: candidate: 'uint8_t* WiFiSTAClass::BSSID(uint8_t*)'
171 | uint8_t *BSSID(uint8_t *bssid = NULL);
| ^~~~~
In file included from C:\Users\ebhynes\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.2.0\libraries\WiFi\src/WiFi.h:36:
C:\Users\ebhynes\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.2.0\libraries\WiFi\src/WiFiScan.h:52:12: note: candidate: 'uint8_t* WiFiScanClass::BSSID(uint8_t, uint8_t*)'
52 | uint8_t *BSSID(uint8_t networkItem, uint8_t *bssid = NULL);
|
Какое решение?
@Kosmada, 👍1
Обсуждение1 ответ
Вот немного сокращённая версия сообщения об ошибке. Если вы возьмёте время прочитать его внимательно, он должен намекнуть вам на происхождение проблема:
error: call of overloaded 'BSSID(int)' is ambiguous
candidate: uint8_t *BSSID(uint8_t *bssid = NULL);
candidate: uint8_t *BSSID(uint8_t networkItem, uint8_t *bssid = NULL);
Это означает, что метод ожидает в качестве параметров:
либо необязательный указатель (по умолчанию
NULL), который является подпись первого кандидатаили число
uint8_t, за которым может следовать указатель (по умолчанию наNULL), что является вторым кандидатом.
Поскольку вы вызвали его с единственным параметром 0, который является int,
компилятор не знает, имелось ли в виду, что этот параметр должен быть
указатель (первый кандидат) или uint8_t (второй кандидат).
Решение — явно указать тип. Предположительно:
values[i] = WiFi.BSSID(uint8_t(0))[i];
- esp32, platformio A fatal error occurred: Packet content transfer stopped (received 8 bytes) *** [upload] Error 2
- Драйверы для чипа последовательного порта CH9102X
- Контакты RX и TX на esp32
- Как выбрать альтернативные контакты I2C на ESP32?
- ESP32 - "Детектор Браунаута был активирован" при запуске Wi-Fi
- Как преобразовать форматированный оператор print в строковую переменную?
- Питание esp32cam от аккумулятора
- Использование esp-wroom-32 без платы разработки
values[i] = WiFi.BSSID( ((uint8_t) 0)[i];чтобы устранить неоднозначность. Это не ваша ошибка. У них неправильный дизайн API., @Juraj@Juraj Допустим, в C++ есть ошибка проектирования, из-за которой
0становится целым числом **и** указателем. :-D Проблема возникает только из-за литерального значения0. Однако хороший API постарается обойти это., @the busybee