私はC++を初めて使用しています。私は既存の機能しているCスタイルのコードをC++に変換しようとしています。 arduinoコア用のESP8266WebServerです。これは、C++クラスであるESP8266WebServerを使用します。私は上記のクラスをオブジェクトとして含むクラスを作成しようとしています。ただし、次のコードは、次のエラーを生成します。私は、IDEに付属のサンプルコードを使用することができますが、その後はあまり学習しません。どんな助けでも大歓迎です。C++ <未解決のオーバーロードされた関数タイプ>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
class myServer {
public:
const char* ssid="mySSID";
const char* pass="myPASS";
myServer(int n);
void start();
void handlers();
void sayHello();
private:
ESP8266WebServer serv;
};
myServer::myServer(int n){
ESP8266WebServer serv(n);
}
void myServer::start(){
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
}
void myServer::sayHello() {serv.send(200, "text/plain", "hello from esp8266!");}
void myServer::handlers(){
if (MDNS.begin("esp8266")) {Serial.println("MDNS responder started");}
serv.on("/", sayHello);
//on("/inline", [](){send(200, "text/plain", "this works as well");});
//onNotFound();
serv.begin();
}
//----------------------
myServer server(80);
void setup(){
server.start();
server.handlers();
}
void loop() {
//server.handleClient(); //goes in to loop
}
次のエラーが発生します。
/home/mrpong/Arduino/myserver/myserver.ino: In member function 'void myServer::handlers()':
myserver:34: error: no matching function for call to 'ESP8266WebServer::on(const char [2], <unresolved overloaded function type>)'
serv.on("/", sayHello);
^
/home/mrpong/Arduino/myserver/myserver.ino:34:26: note: candidates are:
In file included from /home/mrpong/Arduino/myserver/myserver.ino:3:0:
/home/mrpong/.arduino15/packages/esp8266/hardware/esp8266/2.3.0/libraries/ESP8266WebServer/src/ESP8266WebServer.h:79:8: note: void ESP8266WebServer::on(const char*, ESP8266WebServer::THandlerFunction)
void on(const char* uri, THandlerFunction handler);
^
/home/mrpong/.arduino15/packages/esp8266/hardware/esp8266/2.3.0/libraries/ESP8266WebServer/src/ESP8266WebServer.h:79:8: note: no known conversion for argument 2 from '<unresolved overloaded function type>' to 'ESP8266WebServer::THandlerFunction {aka std::function<void()>}'
/home/mrpong/.arduino15/packages/esp8266/hardware/esp8266/2.3.0/libraries/ESP8266WebServer/src/ESP8266WebServer.h:80:8: note: void ESP8266WebServer::on(const char*, HTTPMethod, ESP8266WebServer::THandlerFunction)
void on(const char* uri, HTTPMethod method, THandlerFunction fn);
^
/home/mrpong/.arduino15/packages/esp8266/hardware/esp8266/2.3.0/libraries/ESP8266WebServer/src/ESP8266WebServer.h:80:8: note: candidate expects 3 arguments, 2 provided
/home/mrpong/.arduino15/packages/esp8266/hardware/esp8266/2.3.0/libraries/ESP8266WebServer/src/ESP8266WebServer.h:81:8: note: void ESP8266WebServer::on(const char*, HTTPMethod, ESP8266WebServer::THandlerFunction, ESP8266WebServer::THandlerFunction)
void on(const char* uri, HTTPMethod method, THandlerFunction fn, THandlerFunction ufn);
^
/home/mrpong/.arduino15/packages/esp8266/hardware/esp8266/2.3.0/libraries/ESP8266WebServer/src/ESP8266WebServer.h:81:8: note: candidate expects 4 arguments, 2 provided
exit status 1
no matching function for call to 'ESP8266WebServer::on(const char [2], <unresolved overloaded function type>)'
大変助かりました。代わりに、メンバ関数は、がA
のインスタンスに対して呼び出されるを必要とすることであるA::m
あり、
私が言及したように、私は初心者です。それは少し読んだがゆっくりと私はそれを理解しています。明確な答えと例をありがとう。 – user2530027