![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Alvi |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 19.2.2008 Репутация: нет Всего: нет |
Есть язык Си (НЕ С++). Нужно организовать примитивную базу данных для описания меню на микроконтроллер.
Итак, хотелось бы всё меню поместить в структуру, в которой помещаются названия менюшек, единиц измерения, их значений и т.д. Для простоты задачи сделаем структуру из четырех элементов: struct{ unsigned char ID; char Name[3]; int Default[3]; int Value[3]; }Menu; где ID - номер элемента меню Name - название элемента меню Default - значения по умолчанию value - текущее значение все как бы ничего, но у меня параметры Name и Default должны инициализироваться при программировании, и не изменяться, т.е. хотелось бы видеть все это примерно в таком виде: struct{ unsigned char ID; char Name[3] = {"Перем1", "Перем2", "Перем3"}; int Default[3] = {1, 2, 3}; int Value[3]; }Menu; Но не работает, собака... При компиляции пишет ошибки как раз в строках инициализации массивов Name и Default. Отсюда вопрос: Как это можно обойти? Не принимается инициализация элементов структуры типа: Menu.Name[0] = "Перем1"; Menu.Name[1] = "Перем2"; Menu.Name[2] = "Перем3"; Т.к. таких элементов просто дофига ,плюс в структуре есть один двумерный массив, плюс при программировании для микроконтроллеров есть куча специфических моментов при инициализации строковых переменных (организация памяти там через ж... сделана). Т.е. в таком виде инициализация меню займет половина памяти микроконтроллера. Жду ваших предложений. |
|||
|
||||
EnergoHokum |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 600 Регистрация: 10.11.2006 Где: Россия, Ставропол ь Репутация: нет Всего: 6 |
То-есть, если я правильно понял, нужно, чтобы эти поля были одинаковыми для всех экземпляров этой структуры? Тогда, может быть, сделать эти поля static? И char Name[3] = {"Перем1", "Перем2", "Перем3"};, мне кажется, скорее должно быть char* Name[3] = {"Перем1", "Перем2", "Перем3"};. Поправьте меня, если что...
|
|||
|
||||
_stranger_ |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 3.10.2006 Где: город-герой Киев Репутация: 2 Всего: 2 |
может вот так:
|
|||
|
||||
Alvi |
|
|||
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 19.2.2008 Репутация: нет Всего: нет |
Да, все верно! Я уже вчера сам разобрался. Всем спасибо
![]() Надо, действительно, делать так: struct M{ unsigned char ID; char Name[3]; int Default[3]; int Value[3]; }; struct M Menu{0, {"Перем1", "Перем2", "Перем2"}, {1, 2, 3}, {0, 0, 0} }; Вот и все дела. Обращаться к элементам таких массивов совсем просто: Menu.Value[2] = Menu.Default[2]; Ну или через typedef, что то же самое было бы ![]() Вся беда в том, что нужно было сделать примитивную базу данных на микроконтроллере, который не предназначен для этого. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |