【发布时间】:2019-12-30 11:48:42
【问题描述】:
我正在学习如何有效地为 ESP8266 项目分离我的 C++ 代码,并且在提取网络服务器函数和对象时遇到了一些问题。我使用 this 教程中的示例代码作为我的基点。
我觉得我了解了如何构建类和标头的基础知识,但是当我尝试在我的类中使用另一个类时,我遇到了错误……但仅限于某些函数。
这是我的 main.cpp:
#include <CServer.h>
CServer clientServer(80); //create a CServer, which will create a private WebServer object on init.
void setup(void)
{
clientServer.startRoutes(); //start routes declared in CServer.cpp
clientServer.begin(); // start the server
}
void loop(void){
clientServer.handleClient(); // Listen for HTTP requests from clients
}
这是我的 CServer.h:
//begin include for class CServer to handle client server functions
#ifndef CSERVER_H
#define CSERVER_H
#include <ESP8266WebServer.h>
//Client server functions are handled by this class.
ESP8266WebServer
class CServer
{
private:
ESP8266WebServer server; //local instance of the webserver object
public:
CServer(int port);
void handleClient();
void handleNotFound();
void handleRoot();
void begin();
void startRoutes();
};
#endif
最后是 CServer.cpp
#include "CServer.h"
CServer::CServer(int port)
{
ESP8266WebServer server(port); //create a server with the passed port
}
void CServer::handleClient()
{
server.handleClient();
};
void CServer::handleRoot()
{
server.send(200, "text/plain", "Hello world!"); // Send HTTP status 200 (Ok) and send some text to the browser/client
}
void CServer::handleNotFound()
{
server.send(404, "text/plain", "404: Not found"); // Send HTTP status 404 (Not Found) when there's no handler for the URI in the request
}
void CServer::begin()
{
server.begin();
}
void CServer::startRoutes()
{
server.on("/", handleRoot);
server.onNotFound(handleNotFound);
}
我收到了错误:
没有匹配的调用函数 'esp8266webserver::ESP8266WebServerTemplate::on(const char [2],)'
对于 handleRoot 和 handleNotFound 函数,我试图在 .cpp 文件的最后传递给“server.on”和“server.onNotFound”。
我希望使用许多不同的库等来构建设备,并且非常想知道如何使用这种策略有效地清理我的代码,因此了解正确的方法至关重要。
【问题讨论】:
-
与您的问题无关,但
CServer的构造函数在主体中创建了一个名为server的变量,这意味着它不会初始化名为server的类成员。这两件事被命名为server这一事实并不会神奇地导致它们相关。
标签: c++ arduino refactoring esp8266