[英]Use class in differents task on ESP8266 - CPP
我实际上是在 esp8266 上编程。 我正在使用多任务处理,我想从任何任务访问一个类。 关于我正在使用 PlatFormIO 的建筑,所以我不管理构建。
这是我的 main.cpp 文件:
#include "HackQuarium.h"
class LedShowTask : public Task {
public:
void loop() {
// some stuff
}
} ledShowTask;
class WeatherTask : public Task {
public:
void loop() {
// some stuff
}
} weatherTask;
class LightTask : public Task {
public:
void loop() {
// some stuff
}
} lightTask;
void setup() {
Serial.begin(115200);
Scheduler.start(&ledShowTask);
Scheduler.start(&weatherTask);
Scheduler.start(&lightTask);
Serial.println(F("SETUP"));
Scheduler.begin();
}
这是我在 HackQuarium.h 文件中的类:
class AllStaticData {
public:
static t_API_current_weather currentWeather;
static t_HackQuarium_data hackQuariumData;
};
我想我需要为我的班级创建一个“全局”实例才能从我的所有任务中访问它,但我不知道如何去做。
如果我在 setup() 函数中创建一个实例,我看不到如何在我的任务中传递它:/
谢谢
在我看来,您声明了静态属性,但您没有定义它们。 它应该是:
文件.h
class AllStaticData {
public:
t_API_current_weather currentWeather;
t_HackQuarium_data hackQuariumData;
};
文件.cpp
t_API_current_weather AllStaticData::currentWeather;
t_HackQuarium_data AllStaticData::hackQuariumData;
您还可以在定义这两个构造函数时调用所需的构造函数:
//using some example variable
std::string X_class::value("Hello");
编辑:你的班级应该有一个 .h 文件和一个 .cpp 文件; 在 .cpp 中包含 .h 并在任何函数之外定义静态变量
但是:您想从一些并行任务访问静态数据成员,因此您不必创建类的实例,只需使用类的名称访问成员即可。 是的,您需要同步访问以避免某些任务读取而另一个写入。
您的问题不在于传递类的实例,因为所有成员都是静态的。
如果我声明:
t_API_current_weather AllStaticData::currentWeather;
t_HackQuarium_data AllStaticData::hackQuariumData;
在设置功能中,VSCode 告诉我“未经授权的限定名称”。 如果我在任何函数 VSCode 之外声明它,请告诉我“不能在其类之外定义非静态数据成员”
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.