For each loop funkar ej

Jag deklarerar en array med wifinamn i ino-filen som sådan:

String ssid_white_list [] = {
  {"WiFi1"},
  {"WiFi2"},
  {"WiFi3"},
  {"WiFi4"},
  {"WiFi5"}
};

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.

Vilken Arduino använder ni?

se en fungerande lösning här:

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?

Koden snurrar på en esp8266.

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)

Tack,
ska kolla på den lösningen!

För att dela med mig av lösningen:

Deklarera vektorn i .ino filen:

	#include <vector>

	std::vector<String> ssid_white_list = {"WiFi1", "WiFi2", "WiFi3", "WiFi4", "WiFi5"};

Hämta in vektorn via extern och iterera den i en for each loop i .cpp filen:

	extern std::vector<String> ssid_white_list;
	
	 for (auto ssid_wl : ssid_white_list) {Serial.println("\t" + ssid_wl);}

Tack för hjälpen J-M-L

Bra jobbat :)