【发布时间】:2017-11-21 22:30:46
【问题描述】:
我正在用 C 编写一个 Arduino 库,但我正在努力如何初始化一个结构数组。
我目前将此作为我的Menu.h 文件
#ifndef MENU_H
#define MENU_H
#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif
struct menuItem_t {
char heading[16];
char item[16];
configItem_t* configItem;
};
class menu_t {
public:
menu_t();
void test();
menuItem_t _items[];
private:
};
#endif
在Menu.cpp 文件中,我尝试了各种方法来初始化这个数组,但似乎都没有工作(即永远不会填充数组)
#include "Menu.h"
menu_t::menu_t(){
}
void menu_t::test(){
Serial.println("test:");
Serial.println((sizeof(_items)/sizeof(_items[0])));
Serial.println("first heading:");
Serial.println(_items[0].heading);
}
menuItem_t _items[] = {
{"TIME", "", NULL},
{"H", "Hour", NULL},
{"M", "Minute", NULL},
};
这个测试总是返回 BLANK sketch.ino:
#include "Menu.h"
menu_t m;
void setup(){
Serial.begin(115200);
Serial.println("Started...");
m.test();
}
void loop(){
}
我已经以非 OO 方式测试了代码,它似乎可以正常工作。我在语言上苦苦挣扎:(
奇怪的是我设法让这段代码以某种方式工作,很兴奋,删除了一些代码,然后它就停止了工作。我知道我很接近了!
谢谢!
【问题讨论】:
-
你确定这是 C 吗? C 没有类。
-
“删除了一些代码,然后它停止工作”。查看版本控制。
-
我没有在它工作的时候检查它:(
-
menuItem_t _items[];是 C++ 中的错误。您应该在该点指定尺寸 -
@MrMase 我怀疑它会创建一个除 0 以外的任何大小的“空白结构数组”
标签: c++ arrays struct arduino initialization