Arduino compile error while using reference to a struct in another struct

跟風遠走 提交于 2019-12-14 04:23:54

问题


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.

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

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?


回答1:


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;
}

Note the syntax for the initialization of menu_item1 and menu_item2.

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

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.



来源:https://stackoverflow.com/questions/28397551/arduino-compile-error-while-using-reference-to-a-struct-in-another-struct

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!