Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> инициализация массива в структуре 
:(
    Опции темы
Alvi
Дата 19.2.2008, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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";

Т.к. таких элементов просто дофига ,плюс в структуре есть один двумерный массив, плюс при программировании для микроконтроллеров есть куча специфических моментов при инициализации строковых переменных (организация памяти там через ж... сделана). Т.е. в таком виде инициализация меню займет половина памяти микроконтроллера.
Жду ваших предложений.
PM MAIL   Вверх
EnergoHokum
Дата 19.2.2008, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 600
Регистрация: 10.11.2006
Где: Россия, Ставропол ь

Репутация: нет
Всего: 6



То-есть, если я правильно понял, нужно, чтобы эти поля были одинаковыми для всех экземпляров этой структуры? Тогда, может быть, сделать эти поля static? И char Name[3] = {"Перем1", "Перем2", "Перем3"};, мне кажется, скорее должно быть char* Name[3] = {"Перем1", "Перем2", "Перем3"};. Поправьте меня, если что...
PM MAIL ICQ   Вверх
_stranger_
Дата 19.2.2008, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 3.10.2006
Где: город-герой Киев

Репутация: 2
Всего: 2



может вот так:
Код

typedef struct
{
   unsigned char ID; 
   char Name[3];
   int Default[3];
   int Value[3];
}Menu;
Menu qqq = {0,{'a', 'a', 'a'},{1, 2, 3},};

PM MAIL   Вверх
Alvi
Дата 20.2.2008, 09:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 19.2.2008

Репутация: нет
Всего: нет



Да, все верно! Я уже вчера сам разобрался. Всем спасибо smile 
Надо, действительно, делать так:

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, что то же самое было бы smile

Вся беда в том, что нужно было сделать примитивную базу данных на микроконтроллере, который не предназначен для этого.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0834 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.