(Not确定这是否仅是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类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
型
1条答案
按热度按时间fdx2calv1#
我可以从你的例子中得到一个MCVE:
字符串
它给出了一个与你的代码类似的错误:
型
问题是您使用了一个示例来访问
struct
类型/名称。型
与
型
备注:
C++
的一个功能,在 Arduino 下可用。型