Hi, I’m programming an ESP32 under the Arduino framework.
I have a simple class structure formed by the main class and another class named ConfigWebServer:
I have created an instance to said class by using in main:
ConfigWebServer ws(server);
When I compile I get the following error:
.pio\build\nodemcu-32s\src\ConfigWebServer.cpp.o: .literal._ZN15ConfigWebServer9processorERK6String+0x10): undefined reference to `ConfigWebServer::ledState’
collect2.exe: error: ld returned 1 exit status
*** [.pio\build\nodemcu-32s\firmware.elf] Error 1
This is the content of ConfigWebServer.h
#include "arduino.h"
#ifndef AsyncWebServer
#include <ESPAsyncWebServer.h>
#endif
#include <SPIFFS.h>
class ConfigWebServer{
public:
ConfigWebServer(AsyncWebServer server);
private:
static String processor(const String& var);
static String ledState;
};
And ConfigWebServer.cpp:
#include “ConfigWebServer.h”
ConfigWebServer::ConfigWebServer(AsyncWebServer server)
{
if(!SPIFFS.begin(true)){
Serial.println("An Error has occurred while mounting SPIFFS");
}
// Route for root / web page
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request)
{ request->send(SPIFFS, "/index.html", String(), false, processor); });
// Route to load style.css file
server.on("/style.css", HTTP_GET, [](AsyncWebServerRequest *request)
{ request->send(SPIFFS, "/style.css", "text/css"); });
// Route to set GPIO to HIGH
server.on("/on", HTTP_GET, [](AsyncWebServerRequest *request)
{
request->send(SPIFFS, "/index.html", String(), false, processor);
});
// Route to set GPIO to LOW
server.on("/off", HTTP_GET, [](AsyncWebServerRequest *request)
{
request->send(SPIFFS, "/index.html", String(), false, processor);
});
server.on("/test.js", HTTP_GET, [](AsyncWebServerRequest *request){
request->send(SPIFFS, "/test.js", "text/javascript");
});
server.begin();
}
String ConfigWebServer::processor(const String &var)
{
Serial.print("the var is: ");
Serial.println(var);
if (var == "TACSSUP")
{
ledState = "36";
Serial.print(ledState);
return ledState;
}
else if (var == "TACSINF")
{
ledState = "31";
Serial.print(ledState);
return ledState;
}
else if (var == "TSETACS")
{
ledState = "40";
Serial.print(ledState);
return ledState;
}
else if (var == "ACSMODE")
{
ledState = "AUTO";
Serial.print(ledState);
return ledState;
}
return String();
}
As you can see ledState is declared on the .h file and anywhere else.