Jag kan iterera listan och skriva den till serieporten i ino-filen med följande rader kod:
Serial.println("SSID white list: ");
for (String ssid_wl : ssid_white_list) { Serial.println("\t" + ssid_wl); }
Det uppstår ett problem när jag försöker iterera arrayen från en .cpp fil i samma projekt. Jag hämtar referensen enligt: extern String ssid_white_list[];
och försöker med följande: for (String ssid_wl : ssid_white_list) { Serial.println("\t" + ssid_wl); }
men får felmeddelande:
C:\Users\usrname\Documents\Arduino\ESP_wifi\projectname\file_function.cpp: In function 'void appendSSID(esppl_frame_info, const char*)':
C:\Users\usrname\Documents\Arduino\ESP_wifi\projectname\file_function.cpp:173:25: error: range-based 'for' expression of type 'String []' has incomplete type
173 | for (String ssid_wl : ssid_white_list) { Serial.println("\t" + ssid_wl); }
| ^~~~~~~~~~~~~~~
Multiple libraries were found for "SD.h"
Used: C:\Users\usrname\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\3.1.2\libraries\SD
Not used: C:\Users\usrname\AppData\Local\Arduino15\libraries\SD
exit status 1
Compilation error: range-based 'for' expression of type 'String []' has incomplete type
Jag har provat att lägga till [] efter ssid_white_list i for-each loopen, samt alla andra saker jag kunnat komma på utan resultat. Nån som kan hjälpa?
Problemet kommer från att kompilatorn inte känner till storleken på arrayen ssid_white_list när du använder den i .cpp-filen. När du deklarerar en array externt med extern, har kompilatorn inte information om arrayens storlek vid den tidpunkten. För att iterera över arrayen med en for-loop baserad på intervallet (range-based for loop), behöver kompilatorn veta den exakta storleken på arrayen, vilket inte är möjligt med en extern-deklaration.
Tack för svar!
Min work-around lösning hittills har varit en liknande lösning som du föreslår. En for loop som räknar up index t.o.m arrayens storlek. Då har jag hämtat arrayens storlek via ett extern-statement, vilket jag hoppades kunna undvika. Jag söker en snyggare lösning helt enkelt. Dessutom kan arrayen inte vara tom med min work-around lösning, eftersom när jag deklarerar size_of_ssid_white_list så blir det kompileringsfel (om jag minns rätt).
Men eftersom det funkar i ino-filen, innebär det att kompilatorn vid tidpunkten för kompilering av .cpp-filen ännu inte har kompilerat ino-filen?
på ESP kan du använda en vektor (vector) istället för en array och i så fall behöver du inte oroa dig för storleken (vektorobjektet hanterar sin egen storlek)