如何解决不同标题中使用的设置结构
我正在努力正确设置一些我希望能够在多个文件中使用的结构。我想为微控制器保存一些可以在某些结构中操作的设置。主要结构包含一些主要设置,而结构具有更具体的设置。
我有一个settings.h
,一个a.h
和一个b.h
。
在settings.h
中,我的结构如下:
#ifndef LT_SETTINGS_H
#define LT_SETTINGS_H
#include "SD_save.h"
struct ASettings {
IPAddress ip;
uint16_t port;
char *user;
char *password;
};
struct BSettings {
bool xEnabled;
bool yEnabled;
bool zEnabled;
};
struct Settings {
char *name;
ASettings a;
BSettings b;
bool active;
bool changed = false;
} settings;
[...]
#endif //LT_SETTINGS_H
在settings.cpp
中,我想要一些方法来从SD卡保存和加载这些设置。
在a.h
中,我有与 A 相关的方法,这些方法需要ASettings
中的参数。 b.h
和BSettings
也有类似的情况。
我希望能够同时操纵ASettings
中的a.h
和BSettings
中的b.h
。
我该如何完成?我玩过extern
,typedef
s,不同的设置位于相应的头文件中,但是我无法编译它。
如果这是一个愚蠢的想法,并且有更好的解决方案,请告诉我。我觉得我一开始会错误地解决这个问题。
编辑1:
到目前为止,我仅包括个settings.h
和a.h
中的b.h
,并且遇到很多multiple definition
错误:
libraries/l/a.cpp.o:(.bss.aSettings+0x0): multiple definition of `aSettings'
sketch/sensor_ap_test.ino.cpp.o:(.bss.aSettings+0x0): first defined here
libraries/l/a.cpp.o:(.bss.settings+0x0): multiple definition of `settings'
sketch/sensor_ap_test.ino.cpp.o:(.bss.settings+0x0): first defined here
libraries/l/a.cpp.o:(.bss.bSettings+0x0): multiple definition of `bSettings'
sketch/sensor_ap_test.ino.cpp.o:(.bss.bSettings+0x0): first defined here
libraries/l/sensors.cpp.o:(.bss.bSettings+0x0): multiple definition of `bSettings'
sketch/sensor_ap_test.ino.cpp.o:(.bss.bSettings+0x0): first defined here
libraries/l/sensors.cpp.o:(.bss.aSettings+0x0): multiple definition of `mqttSettings'
sketch/sensor_ap_test.ino.cpp.o:(.bss.aSettings+0x0): first defined here
libraries/l/sensors.cpp.o:(.bss.settings+0x0): multiple definition of `settings'
sketch/sensor_ap_test.ino.cpp.o:(.bss.settings+0x0): first defined here
libraries/l/settings.cpp.o:(.bss.aSettings+0x0): multiple definition of `aSettings'
sketch/sensor_ap_test.ino.cpp.o:(.bss.aSettings+0x0): first defined here
libraries/l/settings.cpp.o:(.bss.settings+0x0): multiple definition of `settings'
sketch/sensor_ap_test.ino.cpp.o:(.bss.settings+0x0): first defined here
libraries/l/settings.cpp.o:(.bss.bSettings+0x0): multiple definition of `sensorSettings'
sketch/sensor_ap_test.ino.cpp.o:(.bss.bSettings+0x0): first defined here
libraries/l/webconf.cpp.o:(.bss.aSettings+0x0): multiple definition of `mqttSettings'
sketch/sensor_ap_test.ino.cpp.o:(.bss.aSettings+0x0): first defined here
libraries/l/webconf.cpp.o:(.bss.settings+0x0): multiple definition of `settings'
sketch/sensor_ap_test.ino.cpp.o:(.bss.settings+0x0): first defined here
libraries/l/webconf.cpp.o:(.bss.bSettings+0x0): multiple definition of `bSettings'
sketch/sensor_ap_test.ino.cpp.o:(.bss.bSettings+0x0): first defined here
collect2: error: ld returned 1 exit status
exit status 1
({{1}中也包含b.h
)
编辑2:
我对初始代码进行了一些更改,将编译器错误减少至此:
webconf.h
libraries/l/a.cpp.o:(.bss.settings+0x0): multiple definition of `settings'
sketch/sensor_ap_test.ino.cpp.o:(.bss.settings+0x0): first defined here
libraries/l/sensors.cpp.o:(.bss.settings+0x0): multiple definition of `settings'
sketch/sensor_ap_test.ino.cpp.o:(.bss.settings+0x0): first defined here
libraries/l/settings.cpp.o:(.bss.settings+0x0): multiple definition of `settings'
sketch/sensor_ap_test.ino.cpp.o:(.bss.settings+0x0): first defined here
libraries/l/webconf.cpp.o:(.bss.settings+0x0): multiple definition of `settings'
sketch/sensor_ap_test.ino.cpp.o:(.bss.settings+0x0): first defined here
collect2: error: ld returned 1 exit status
exit status 1
:
a.h
#ifndef LT_MQTT_H
#define LT_MQTT_H
#include "wm_params.h"
#include "settings.h"
#endif //LT_MQTT_H
:
b.h
#ifndef LT_SENSORS_H
#define LT_SENSORS_H
#include "wm_params.h"
#include "settings.h"
[...]
#endif // LT_SENSORS_H
:
wm_params.h
解决方法
由于多个cpp文件包含头文件setting
,因此多次定义了变量settings.h
。
只能在一个cpp文件中定义一个变量。要在头文件中声明变量,可以使用extern
关键字。
struct Settings {
char *name;
ASettings a;
BSettings b;
bool active;
bool changed = false;
};
extern Settings settings;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。