【发布时间】:2019-01-12 17:22:07
【问题描述】:
我正在尝试开始使用 PlatformIO,但遇到了包含优先级和/或变量范围的问题。
我的代码由一个src/main.cpp 程序以及几个位于lib/<libname>/*.cpp/h 位置的私有库组成。
我想要一个外部类 (Syslog) 的全局对象,我的主程序和我添加的任何私有库都可以访问它。
我目前尝试了两种方法,都拒绝编译:
在main.cpp中使用extern关键字创建对象,在setup()中初始化对象如下:
src/main.cpp:
#include <Syslog.h>
#include <WiFiUdp.h>
WiFiUDP SyslogUDP;
extern Syslog syslog;
void setup()
{
syslog = Syslog(SyslogUDP, "255.255.255.255", 514, "FlyballETS", "FlyballETSApp", LOG_INFO, SYSLOG_PROTO_BSD);
}
lib/GPSHandler/GPSHandler.cpp:
void GPSHandlerClass::init(HardwareSerial * SerialPort)
{
syslog.logf_P("GPS Class initialized!");
}
这会导致编译器错误,例如:
lib\GPSHandler\GPSHandler.cpp:22:4: error: 'syslog' was not declared in this scope
我尝试的第二种方法(在 Arduino IDE 中有效)是创建一个小的 SyslogHelper.h 文件,该文件创建了 extern Syslog syslog; 对象,然后将此帮助文件包含在我所有的私有库中,如下所示:
src/main.cpp:
#include "SyslogHelper.h"
#include <WiFiUdp.h>
WiFiUDP SyslogUDP;
void setup()
{
syslog = Syslog(SyslogUDP, "255.255.255.255", 514, "FlyballETS", "FlyballETSApp", LOG_INFO, SYSLOG_PROTO_BSD);
}
src/SyslogHelper.h:
#include <Syslog.h>
extern Syslog syslog;
lib/GPSHandler/GPSHandler.cpp:
#include "SyslogHelper.h"
void GPSHandlerClass::init(HardwareSerial * SerialPort)
{
syslog.logf_P("GPS Class initialized!");
}
当我尝试在 PlatformIO 中编译它时,它失败了,因为在它尝试编译 SyslogHelper.h 时,它似乎不知道 <Syslog.h> 文件的位置:
In file included from lib\GPSHandler\GPSHandler.cpp:7:0:
src/SyslogHelper.h:4:20: fatal error: Syslog.h: No such file or directory
【问题讨论】:
标签: c++ arduino platformio