Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/132.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c++&书信电报;未解析的重载函数类型>; 我是C++新手。我试图将现有的和功能化的C风格代码转换成C++。它是arduino core的ESP8266Web服务器。它使用了一个C++类的ESP8266WebServer。我正在尝试创建一个包含上述类作为对象的类。但是,以下代码会生成下面列出的错误。我知道我可以使用IDE附带的示例代码,但这样我就不会学到太多。非常感谢您的帮助 #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 } #包括 #包括 #包括 #包括 类myServer{ 公众: const char*ssid=“mySSID”; const char*pass=“myPASS”; myServer(intn); void start(); 无效处理程序(); void sayHello(); 私人: ESP8266Web服务器服务; }; myServer::myServer(int n){ ESP8266Web服务器服务(n); } void myServer::start(){ WiFi.begin(ssid,pass); while(WiFi.status()!=WL_已连接){ 延迟(500); 连续打印(“.”); } } void myServer::sayHello(){serv.send(200,“text/plain”,“你好,来自esp8266!”);} void myServer::handlers(){ if(MDNS.begin(“esp8266”){Serial.println(“MDNS响应程序已启动”);} 服务于(“/”,sayHello); //在(“/inline”上,[](){send(200,“text/plain”,“这也可以”);}); //onNotFound(); serv.begin(); } //---------------------- myServer服务器(80); 无效设置(){ server.start(); server.handlers(); } void循环(){ //server.handleClient();//进入循环 }_C++ - Fatal编程技术网

c++&书信电报;未解析的重载函数类型>; 我是C++新手。我试图将现有的和功能化的C风格代码转换成C++。它是arduino core的ESP8266Web服务器。它使用了一个C++类的ESP8266WebServer。我正在尝试创建一个包含上述类作为对象的类。但是,以下代码会生成下面列出的错误。我知道我可以使用IDE附带的示例代码,但这样我就不会学到太多。非常感谢您的帮助 #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 } #包括 #包括 #包括 #包括 类myServer{ 公众: const char*ssid=“mySSID”; const char*pass=“myPASS”; myServer(intn); void start(); 无效处理程序(); void sayHello(); 私人: ESP8266Web服务器服务; }; myServer::myServer(int n){ ESP8266Web服务器服务(n); } void myServer::start(){ WiFi.begin(ssid,pass); while(WiFi.status()!=WL_已连接){ 延迟(500); 连续打印(“.”); } } void myServer::sayHello(){serv.send(200,“text/plain”,“你好,来自esp8266!”);} void myServer::handlers(){ if(MDNS.begin(“esp8266”){Serial.println(“MDNS响应程序已启动”);} 服务于(“/”,sayHello); //在(“/inline”上,[](){send(200,“text/plain”,“这也可以”);}); //onNotFound(); serv.begin(); } //---------------------- myServer服务器(80); 无效设置(){ server.start(); server.handlers(); } void循环(){ //server.handleClient();//进入循环 }

c++&书信电报;未解析的重载函数类型>; 我是C++新手。我试图将现有的和功能化的C风格代码转换成C++。它是arduino core的ESP8266Web服务器。它使用了一个C++类的ESP8266WebServer。我正在尝试创建一个包含上述类作为对象的类。但是,以下代码会生成下面列出的错误。我知道我可以使用IDE附带的示例代码,但这样我就不会学到太多。非常感谢您的帮助 #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 } #包括 #包括 #包括 #包括 类myServer{ 公众: const char*ssid=“mySSID”; const char*pass=“myPASS”; myServer(intn); void start(); 无效处理程序(); void sayHello(); 私人: ESP8266Web服务器服务; }; myServer::myServer(int n){ ESP8266Web服务器服务(n); } void myServer::start(){ WiFi.begin(ssid,pass); while(WiFi.status()!=WL_已连接){ 延迟(500); 连续打印(“.”); } } void myServer::sayHello(){serv.send(200,“text/plain”,“你好,来自esp8266!”);} void myServer::handlers(){ if(MDNS.begin(“esp8266”){Serial.println(“MDNS响应程序已启动”);} 服务于(“/”,sayHello); //在(“/inline”上,[](){send(200,“text/plain”,“这也可以”);}); //onNotFound(); serv.begin(); } //---------------------- myServer服务器(80); 无效设置(){ server.start(); server.handlers(); } void循环(){ //server.handleClient();//进入循环 },c++,C++,我得到以下错误 /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>)'

我得到以下错误

    /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>)'
/home/mrpong/Arduino/myserver/myserver.ino:在成员函数“void myserver::handlers()”中:
myserver:34:错误:调用“ESP8266WebServer::on(const char[2],)时没有匹配的函数”
服务于(“/”,sayHello);
^
/home/mrpong/Arduino/myserver/myserver.ino:34:26:注:候选人包括:
在/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:注意:void ESP8266WebServer::on(const char*,ESP8266WebServer::THandlerFunction)
void on(const char*uri,THandlerFunction处理程序);
^
/home/mrpong/.arduino15/packages/esp8266/hardware/esp8266/2.3.0/libraries/ESP8266WebServer/src/ESP8266WebServer.h:79:8:注意:参数2从“”到“ESP8266WebServer::THandlerFunction{aka std::function}”的转换未知
/home/mrpong/.arduino15/packages/esp8266/hardware/esp8266/2.3.0/libraries/ESP8266WebServer/src/ESP8266WebServer.h:80:8:注意:void ESP8266WebServer::on(const char*,HTTPMethod,ESP8266WebServer::THandlerFunction)
void on(const char*uri,HTTPMethod方法,THandlerFunction fn);
^
/home/mrpong/.arduino15/packages/esp8266/hardware/esp8266/2.3.0/libraries/ESP8266WebServer/src/ESP8266WebServer.h:80:8:注意:候选者需要3个参数,提供2个参数
/home/mrpong/.arduino15/packages/esp8266/hardware/esp8266/2.3.0/libraries/ESP8266WebServer/src/ESP8266WebServer.h:81:8:注意:void ESP8266WebServer::on(const char*,HTTPMethod,ESP8266WebServer::THandlerFunction,ESP8266WebServer::THandlerFunction)
void on(const char*uri,HTTPMethod方法,THandlerFunction fn,THandlerFunction ufn);
^
/home/mrpong/.arduino15/packages/esp8266/hardware/esp8266/2.3.0/libraries/ESP8266WebServer/src/ESP8266WebServer.h:81:8:注意:候选者需要4个参数,提供2个参数
退出状态1
没有匹配的函数用于调用“ESP8266WebServer::on(const char[2],)”
非常感谢您的帮助。 谢谢

f
是一个函数,但是没有
m
,而是有
a::m
,它是一个成员函数,需要调用
a
的实例。从
A
的内部,我们可以将其称为
m
,但不要被愚弄

ESP8266Webserver::on
声明如下:

typedef std::function<void(void)> THandlerFunction;
void on(const String &uri, THandlerFunction handler);
在代码中的问题行之后,有一个lambda示例:

//on("/inline", [](){send(200, "text/plain", "this works as well");});
上的
定义使用
std::function
,因为这允许使用捕获lambda作为这样的参数,只要它不接受任何参数或返回任何内容,我们就可以做任何我们想要的事情

从上面my
struct a的成员函数内部写入
m()
this->m()那样查看编译器。使用lambda,我们使用它来创建所谓的蹦床:

void myServer::handlers(){
    if (MDNS.begin("esp8266")) {Serial.println("MDNS responder started");}
    serv.on("/", [this](){ sayHello(); });
    serv.on("/inline", [](){send(200, "text/plain", "this works as well");});
    //onNotFound();
    serv.begin();
}

正如我提到的,我是个新手。读了几遍,但慢慢地我明白了。谢谢你的明确回答和例子。
//on("/inline", [](){send(200, "text/plain", "this works as well");});
void myServer::handlers(){
    if (MDNS.begin("esp8266")) {Serial.println("MDNS responder started");}
    serv.on("/", [this](){ sayHello(); });
    serv.on("/inline", [](){send(200, "text/plain", "this works as well");});
    //onNotFound();
    serv.begin();
}