реклама на сайте
подробности

 
 
> Не получается разместить в структуре неполный (Incomplete) массив
Alechin
сообщение Feb 7 2006, 07:29
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 158
Регистрация: 27-06-05
Из: Химки, Моск.обл.
Пользователь №: 6 334



Работаю в IAR 4.10A
По хелпу последним элементом структуры может быть незавершенный массив - вот как ее (структуру) объявляют в мануале на компилятор:
struct str
{
char a;
unsigned long b[];
};
Но при этом ругается компилятор на инициализацию такой структуры:
struct str =
{
10,
{ 1, 2, 3}
};

Error[Pe070]: incomplete type is not allowed - и ссылка на объявление структуры.
Так можно ли так делать, или нет?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
dxp
сообщение Feb 7 2006, 07:53
Сообщение #2


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(Alechin @ Feb 7 2006, 13:29) *
Работаю в IAR 4.10A
По хелпу последним элементом структуры может быть незавершенный массив - вот как ее (структуру) объявляют в мануале на компилятор:
struct str
{
char a;
unsigned long b[];
};
Но при этом ругается компилятор на инициализацию такой структуры:
struct str =
{
10,
{ 1, 2, 3}
};

Error[Pe070]: incomplete type is not allowed - и ссылка на объявление структуры.
Так можно ли так делать, или нет?

А С++ случайно не включен? В С++ Incomplete types не разрешены. Только в С.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post
Alechin
сообщение Feb 7 2006, 08:52
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 158
Регистрация: 27-06-05
Из: Химки, Моск.обл.
Пользователь №: 6 334



Цитата
А С++ случайно не включен? В С++ Incomplete types не разрешены. Только в С.

Включен, мне нужны его фичи: инлайн функции, переопределения функций и т.п.
Жаль sad.gif

А тогда каким образом можно это обойти: пример структура с меню, содержит массив структур пунктов. Число пунктов может быть различно. Придется делать отдельно массив с пунктами мень, а в структуру меню вставлять адрес этого массива. А так как массив пунктов меню - это тоже набор указателей - в процедуре меню получается обращение по цепочке указателей, что мне не очень нравится.
Go to the top of the page
 
+Quote Post
dxp
сообщение Feb 7 2006, 10:23
Сообщение #4


Adept
******

Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343



Цитата(Alechin @ Feb 7 2006, 14:52) *
Цитата

А С++ случайно не включен? В С++ Incomplete types не разрешены. Только в С.

Включен, мне нужны его фичи: инлайн функции, переопределения функций и т.п.
Жаль sad.gif

А тогда каким образом можно это обойти: пример структура с меню, содержит массив структур пунктов. Число пунктов может быть различно. Придется делать отдельно массив с пунктами мень, а в структуру меню вставлять адрес этого массива. А так как массив пунктов меню - это тоже набор указателей - в процедуре меню получается обращение по цепочке указателей, что мне не очень нравится.

Почему не нравится? Именно так - через указатели на функции, - и делают подобные вещи. Конечно, при развесистых меню получится гора маловразумительного запутанного кода, и чтобы облегчить ситуацию тут, как раз, С++ные фичи и катят. Используйте для посторения меню возможности ООП. Т.е. создайте абстрактные базовые классы меню, элемента меню с чисто виртуальными (pure virtual) функциями. От них наследуйте конкретные классы, где переопределите эти функции. Все должно получиться элегантно и красиво. Множество ГУИев строится именно так.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 17:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01604 секунд с 7
ELECTRONIX ©2004-2016