在类中创建对象
Posted
技术标签:
【中文标题】在类中创建对象【英文标题】:Creating object(s) within a Class 【发布时间】:2019-10-26 00:20:48 【问题描述】:我有这个问题:
问题:
我正在尝试创建一个库 (ard33WiFi) 来管理和处理 其他几个库(例如 WiFiServer 库) 我需要创建服务器对象,然后在我的库 (ard33WiFi) 中的函数中使用它:WiFiServer myServer(iPort);
'myServer' was not declared in this scope
在哪里/如何声明 myServer 以便整个班级都可以使用 (ard33WiFi)?我已经取消了任何声明,因为无论我尝试什么都是错误的。我在下面粘贴了一个骨架代码。
// HEADER FILE (.h)
// ----------------------------------------------------------------------------------------------
#ifndef Ard33WiFi_h
#define Ard33WiFi_h
#include <WiFiNINA.h>
#include <WiFiUdp.h>
class ard33WiFi
public:
ard33WiFi(int iPort)
void someFunction();
void serverBegin();
private:
int _iPort;
;
#endif
// ----------------------------------------------------------------------------------------------
// C++ FILE (.cpp)
// -----------------------------------------------------------------------------------------------
#include <Ard33Wifi.h>
ard33WiFi::ard33WiFi(int iPort)
_iPort = iPort;
void ard33WiFi::someFunction()
// code here required to prepare the server for initializing
// but ultimately not relevant to the question
void ard33WiFi::serverBegin()
myServer.begin();
Serial.println("Server Online");
我在 UDP 库中遇到了同样的问题,因为我需要在各种函数中调用 UDP 对象来做 UDP 事情。
任何帮助将不胜感激。
【问题讨论】:
我在您提供的代码中看不到WiFiServer myServer(iPort);
。我看到的只是myServer
,它没有按照错误指示声明。
把WiFiServer myServer;
放在int _iPort;
之后。并使用您的ard33WiFi
的初始化列表来初始化端口
这就是为什么你需要在构造函数的初始化列表中初始化。幸好它有你需要的端口。
【参考方案1】:
我想你正在使用这个:
https://www.arduino.cc/en/Reference/WiFiServer
我可以看到您没有在您的班级中声明 myServer;我猜是你的代码中的错误。如果我没记错的话,应该是这样的:
#ifndef Ard33WiFi_h
#define Ard33WiFi_h
#include <WiFiNINA.h>
#include <WiFiUdp.h>
#include <WiFi.h> // Not sure if you have to append this include
class ard33WiFi
public:
ard33WiFi(int iPort)
void someFunction();
void serverBegin();
private:
int _iPort;
WiFiServer myServer;
;
#endif
实现,你需要初始化实例:
#include <Ard33Wifi.h>
ard33WiFi::ard33WiFi(int iPort):myServer(iPort), _iPort(iPort)
void ard33WiFi::someFunction()
// code here required to prepare the server for initializing
// but ultimately not relevant to the question
void ard33WiFi::serverBegin()
myServer.begin();
Serial.println("Server Online");
【讨论】:
请注意,成员是按照它们定义的顺序初始化的,所以myServer(iPort), _iPort(iPort)
首先初始化_iPort
,即使它在列表中是第二个。在这里没关系,但记住这一点是件好事,因为当它确实重要时,它可能会导致一些微妙的以上是关于在类中创建对象的主要内容,如果未能解决你的问题,请参考以下文章