Arduino的,而在另一个结构使用引用一个struct编译错误 [英] Arduino compile error while using reference to a struct in another struct

查看:1026
本文介绍了Arduino的,而在另一个结构使用引用一个struct编译错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在prgramming菜单为16×2 LCD的一个小的Arduino项目。
我很接近完成,但我不明白的最后一个小问题。

I'm on prgramming a menu for an 16x2 LCD for a small arduino project. I'm nearly finished, but i do not understand the last small issue.

以下(简体)code产生的问题:

The following (simplified) code generates the problem:

int var1=0;
int var2=0;

typedef struct {
    unsigned int item_value;
    char item_name[17];
} Select_Item;

typedef struct {
  char item_name[17];
  int* variable;
  Select_Item* list;
} Menu_Item;

Select_Item sel_one = { 0, "Selection 1" };
Select_Item sel_two = { 1, "Selection 2" };
Select_Item* sel_list[2] = { &sel_one, &sel_two };

Menu_Item menu_item1 = { "Item 1", &var1, NULL }; 
Menu_Item menu_item2 = { "Item 2", &var2, &sel_list }; 
Menu_Item* menu_list[2] = { &menu_item1, &menu_item2 };

这与以下错误结束:

It ends up with the following error:

 sketch_feb08a.ino:24:53: error: cannot convert 'Select_Item* (*)[2]' to 'Select_Item*' in initialization

在code我是从访问变量的值,并显示在显示屏上,一旦编辑,我可以把它写回变量。只要这不是问题,因为我刚刚号码显示/编辑。
现在为了便于使用,我想添加一些选项菜单中,用户可以从选项中进行选择的。的ITEM_NAME应显示,代替原始值,但当然ITEM_VALUE应幕后被使用。
这就是为什么我介绍了Select_Item结构。

In the code i'm accessing the values from the variables and show it in the display and once edited i can write it back to the variable. That was not the problem as long as i had just numbers to show/edit. Now for ease of use i wanted to add some kind of option menu, where the user can choose from the options. The item_name should be displayed, instead of the raw value, but of course the item_value should be used behind the scene. That is why i introduced the Select_Item struct.

我不明白的错误消息。什么是错在这里?

I don't understand the error message. What's wrong here?

推荐答案

我觉得你想要做的是这样的:

I think what you're trying to do is something like this:

int var1=0;
int var2=0;

typedef struct {
    unsigned int item_value;
    char item_name[17];
} Select_Item;

typedef struct {
  char item_name[17];
  int* variable;
  Select_Item* list;
} Menu_Item;

Select_Item sel_one = { 0, "Selection 1" };
Select_Item sel_two = { 1, "Selection 2" };
Select_Item sel_three = {2, "Selection 3" };
Select_Item sel_four = {3, "Selection 4" };

Select_Item* sel_list_1[] = { &sel_one, &sel_two };
Select_Item* sel_list_2[] = { &sel_three, &sel_four };

Menu_Item menu_item1 = { "Item 1", &var1, sel_list_1[0] }; // Note the syntax here
Menu_Item menu_item2 = { "Item 2", &var2, sel_list_2[0] }; // Note the syntax here
Menu_Item* menu_list[2] = { &menu_item1, &menu_item2 };

// Added for testing
int main()
{
    printf("Menu item '%s'\n", menu_list[0]->item_name);
    printf("    %d - %s\n", menu_list[0]->list[0].item_value, menu_list[0]->list[0].item_name);
    printf("    %d - %s\n", menu_list[0]->list[1].item_value, menu_list[0]->list[1].item_name);
    printf("Menu item '%s'\n", menu_list[1]->item_name);
    printf("    %d - %s\n", menu_list[1]->list[0].item_value, menu_list[1]->list[0].item_name);
    printf("    %d - %s\n", menu_list[1]->list[1].item_value, menu_list[1]->list[1].item_name);
    return 0;
}

请注意为 menu_item1 menu_item2 的初始化语法。

Note the syntax for the initialization of menu_item1 and menu_item2.

我添加的main(),这样我可以用一个正常的C编译器测试这个(因为我没有一个Arduino有液晶方便)。从我的测试的输出是这样的:

I added main() just so I could test this with a normal C compiler (since I don't have an Arduino with an LCD handy). The output from my testing looks like this:

Menu Item 'Item 1'
    0 - Selection 1
    1 - Selection 2
Menu Item 'Item 2'
    3 - Selection 3
    4 - Selection 4

我想这就是你想达到与你的数据结构是什么。你只需要这个适应你的Arduino code和使用这些数据结构来管理你的LCD上的菜单选择。

And I think that's what you're trying to achieve with your data structures. You'll just need to adapt this to your Arduino code and use these data structures to manage the menu selections on your LCD.

这篇关于Arduino的,而在另一个结构使用引用一个struct编译错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆