Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.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++;不初始化类的Class.function语法(Arduino)_C++_Arduino - Fatal编程技术网

C++ C++;不初始化类的Class.function语法(Arduino)

C++ C++;不初始化类的Class.function语法(Arduino),c++,arduino,C++,Arduino,这是一个非常初级的问题,所以请不要对我太苛刻。在C++中,特别是在ARDUINO平台上,尽管我怀疑这有什么不同,但我经常使用这样的库: #include "WiFi.h" ... Serial.println("Supra"); WiFi.begin(MODE); ... 但我从未初始化过这些类,但它们的行为似乎像单例。我找了一些可能有线索的来源,但什么也没找到 这些类是如何初始化的?我如何创建自己的,例如名为Messenger,只需包含其头文件即可访问,然后使用变量名Messenger,并

这是一个非常初级的问题,所以请不要对我太苛刻。在C++中,特别是在ARDUINO平台上,尽管我怀疑这有什么不同,但我经常使用这样的库:

#include "WiFi.h"

...
Serial.println("Supra");
WiFi.begin(MODE);
...
但我从未初始化过这些类,但它们的行为似乎像单例。我找了一些可能有线索的来源,但什么也没找到


这些类是如何初始化的?我如何创建自己的,例如名为
Messenger
,只需包含其头文件即可访问,然后使用变量名
Messenger
,并具有类似于
Messenger.send
?arduino-esp32主分支中的
WiFi.h
头:

class WiFiClass : public WiFiGenericClass, public WiFiSTAClass, public WiFiScanClass, public WiFiAPClass
{
// ...
};

// here global variable of class WiFiClass is defined
extern WiFiClass WiFi;
现在,当您执行
WiFi.begin(无论什么)
时,您正在调用
WiFiClass
继承的
WiFiClass
方法

WiFiSTA.h

class WiFiSTAClass
{
public:

    wl_status_t begin(const char* ssid, const char *passphrase = NULL, int32_t channel = 0, const uint8_t* bssid = NULL, bool connect = true);
    wl_status_t begin(char* ssid, char *passphrase = NULL, int32_t channel = 0, const uint8_t* bssid = NULL, bool connect = true);
wl_status_t begin();

// ...
如果您想在标题中创建自己的类和该类的全局变量,只需创建标题,例如
Myheader.hpp

#pragma once
// MyHeader.hpp
class Messenger {
public:
    bool send() {
        // whatever
        return true;
    }
};

extern Messenger Msngr;

然而,我强烈劝阻你遵循这种模式。由于许多原因,使用全局变量是相当糟糕的。如果出于某种原因希望避免复制类的对象,只需使用智能指针即可。如果出于某种原因希望在其他地方创建类的对象,只需创建一个工厂,返回所需的实例。

来自arduino-esp32主分支中的
WiFi.h
头:

class WiFiClass : public WiFiGenericClass, public WiFiSTAClass, public WiFiScanClass, public WiFiAPClass
{
// ...
};

// here global variable of class WiFiClass is defined
extern WiFiClass WiFi;
现在,当您执行
WiFi.begin(无论什么)
时,您正在调用
WiFiClass
继承的
WiFiClass
方法

WiFiSTA.h

class WiFiSTAClass
{
public:

    wl_status_t begin(const char* ssid, const char *passphrase = NULL, int32_t channel = 0, const uint8_t* bssid = NULL, bool connect = true);
    wl_status_t begin(char* ssid, char *passphrase = NULL, int32_t channel = 0, const uint8_t* bssid = NULL, bool connect = true);
wl_status_t begin();

// ...
如果您想在标题中创建自己的类和该类的全局变量,只需创建标题,例如
Myheader.hpp

#pragma once
// MyHeader.hpp
class Messenger {
public:
    bool send() {
        // whatever
        return true;
    }
};

extern Messenger Msngr;

然而,我强烈劝阻你遵循这种模式。由于许多原因,使用全局变量是相当糟糕的。如果出于某种原因希望避免复制类的对象,只需使用智能指针即可。如果出于某种原因希望在其他地方创建类的对象,只需创建一个将返回所需实例的工厂。

请在问题中添加源代码链接。您只需检查WiFi.h界面并查看这些WiFi.begin的定义即可。您可以按照类似的方式创建自己的Messenger.send。它们“像单身汉一样”因为它们是全局变量。请在您的问题中添加源代码链接。您所能做的只是检查WiFi.h界面并查看这些WiFi.begin的定义,然后您可以按照类似的方式创建自己的Messenger.send。由于它们是全局变量,所以它们“像单例一样”。