Для примера такой код: Код (C++): // Это все параметры которые можем менять в меню int Null = 0; // Этот параметр как заглушка, если менять нечего, костыль конечно ... int DateDay ; int DateMonth ; int DateYear ; int TimeHour ; int TimeMin ; int TimeSecond ; typedef struct _value{ int ¶m; // Ссылка на переменную значения int minVal; // Минимальное значение int maxVal; // Максимальное значение } VALUE; // Тип структуры данных описывающих пункт меню typedef struct _MenuItem { String title; // Имя меню void(*on_click)(int); // Ссылка на функцию вызова обрабоки изменения значения, параметр +1 или -1) VALUE *val; char format[10]; // Формат вывода значения переменной } MenuItem; VALUE Date_[]={ {DateDay,1,31}, {DateMonth,1,12}, {DateYear,0,99}, {TimeHour,0,24}, {TimeMin,0,60} }; // Меню, первый пункт это не параметр, а просто выход с сохранением MenuItem MenuItems[] = { { "Date Day ", Settings, Date_, "%02d" }, { "Date Mount ", Settings, Date_, "%02d" }, { "Date Year ", Settings, Date_, "20%02d" }, { "Time Hour ", Settings, Date_, "%02d" }, { "Time Min ", Settings, Date_, "%02d" } void Settings(int Concat) { MenuItems[MenuCurent].val[MenuCurent].param = constrain(MenuItems[MenuCurent].val[MenuCurent].param + Concat, MenuItems[MenuCurent].val[MenuCurent].minVal, MenuItems[MenuCurent].val[MenuCurent].maxVal); }; Мне нужно хранить в массиве структур переменные типа "float" и "int", типа так: Код (C++): // Это все параметры которые можем менять в меню int Null = 0; // Этот параметр как заглушка, если менять нечего, костыль конечно ... int DateDay ; float DateMonth ; //тип float int DateYear ; //тип int float TimeHour ; //и.т.д int TimeMin ; float TimeSecond ; Но в структуре чётко определён тип данных который используем: Код (C++): int ¶m; //вот здесь вся загвоздка (какой параметр определили такой и используем) В инете нагуглил что есть объединение "union", но реализовать не хватает ума. Да и в некоторых статьях пишут что "union" в С++ не работает. Если както можно реализовать прошу помочь, заодно разъяснить!
Ткните носом. Если делаю так: Код (C++): typedef struct _value{ union { int ival; float fval; }¶m; //int ¶m; // Ссылка на переменную значения int minVal; // Минимальное значение int maxVal; // Максимальное значение } VALUE; VALUE Date_[]={ {DateDay.ival,1,31}, {DateMonth.ival,1,12}, {DateYear.ival,0,99}, {TimeHour.ival,0,24}, {TimeMin.ival,0,60} }; рагается Код (Text): sketch_jan13a.ino:48:25: error: request for member 'ival' in 'DateDay', which is of non-class type 'int' sketch_jan13a.ino:49:19: error: request for member 'ival' in 'DateMonth', which is of non-class type 'int' sketch_jan13a.ino:50:18: error: request for member 'ival' in 'DateYear', which is of non-class type 'int' sketch_jan13a.ino:51:18: error: request for member 'ival' in 'TimeHour', which is of non-class type 'int' sketch_jan13a.ino:52:17: error: request for member 'ival' in 'TimeMin', which is of non-class type 'int' Ошибка компиляции.
Если хотите заморочиться - посмотрите, как реализована структура VARIANT в Windows API. Касательно вашего подхода: Код (C++): typedef union { int ival; float fval; } VALUE_UNION; VALUE_UNION Null = {0}; // Этот параметр как заглушка, если менять нечего, костыль конечно ... VALUE_UNION DateDay ; VALUE_UNION DateMonth ; //тип float VALUE_UNION DateYear ; //тип int VALUE_UNION TimeHour ; //и.т.д VALUE_UNION TimeMin ; VALUE_UNION TimeSecond ; typedef enum { vtFloat, vtInteger } VALUE_TYPE; typedef struct _value{ VALUE_TYPE vt; VALUE_UNION ¶m; int minVal; // Минимальное значение int maxVal; // Максимальное значение } VALUE; VALUE Date_[]={ {vtInteger,DateDay,1,31}, {vtFloat,DateMonth,1,12}, {vtInteger,DateYear,0,99}, {vtInteger,Null,24}, {vtInteger,Null,60} }; Тут есть и запоминание, на какой элемент union ссылаемся ( VALUE_TYPE), и ссылка на union. Но я уверен, что вашу задачу можно решить гораздо проще, вы зря так заморочились.
Спасибо большое. Может и по другому решу эту задачу. Я лучше ещё подумаю перед тем как применить "union" . Респект Вам за разжованный код!