(Не уверен, является ли это исключительно проблемой C / C ++)
В настоящее время я фрагментирую элементы большого проекта Arduino в библиотеки многократного использования - пока что это хорошо.
Однако некоторые методы в библиотеках возвращают специальные структуры, которые объявлены в файле data-types.h
, содержащемся в каждой библиотеке.Проблема, с которой я столкнулся сейчас, заключается в том, что я не могу импортировать / использовать эти структуры в своем основном наброске.Я попытался объявить переменную класса DataTypes
в главном файле заголовка библиотеки и получить доступ к структурам через него, но я получаю ошибку error: invalid use of 'struct DataTypes::_theStructNameHere_t'
Как мне поступить с доступом к этим структурам из библиотекив моем основном наброске объявить тип переменной?Я не хочу копировать файл заголовка, который содержит структуры из библиотеки, в мой эскиз, и я также не хочу создавать отдельную библиотеку только для этого одного файла заголовка структур!
Вот краткий пример того, что я имею в виду:
Main.cpp:
#include <Arduino.h>
#include <MyLibrary.h>
MyLibrary myLib;
void setup() {
(This is declared in the library) myLib.dataTypes._theStructNameHere_t response = myLib.getASpecialValueWhichIsOfType_theStructNameHere_t()// Gives "error: invalid use of 'struct DataTypes::_theStructNameHere_t'""
// Example usage of the struct:
Serial.print("\n Loop Card Status: ");Serial.print(response.loop_status, HEX);
if (response.number_allocated > 0) {
Serial.print("\n Devices Allocated: ");Serial.print(response.number_allocated, HEX);
} else {
if (response.loop_status != 0x123) {
// Some condition
} else {
// Something else
}
}
}
void loop() {
...
}
Структура библиотеки:
src/
- /data-types/
- - data-types.h
- MyLibrary.cpp
- MyLibrary.h
Заголовок библиотеки MyLibrary.h
:
#ifndef _MYLIBRARY_H_
#define _MYLIBRARY_H_
#include <Arduino.h>
#include "./helpers/helpers.h"
...
#include "./data-types/data-types.h"
class MyLibrary {
public:
Uart *_commPort;
Helpers helpers;
...
DataTypes dataTypes;
DataTypes::_theStructNameHere_t getASpecialValueWhichIsOfType_theStructNameHere_t();
...
protected:
private:
};
#endif // _MYLIBRARY_H_
DataTypes Class data-types.h
:
#ifndef _RESPONSE_TYPES_H
#define _RESPONSE_TYPES_H
class DataTypes
{
public:
struct _theStructNameHere_t
{
bool successful;
uint8_t loop_status;
uint8_t number_allocated;
uint8_t highest_address;
uint8_t number_inputs;
uint8_t number_outputs;
}
..even more..
private:
}
#endif // _RESPONSE_TYPES_H