Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2014, 14:11   #1
tiger()
Пользователь
 
Регистрация: 09.04.2011
Сообщений: 49
По умолчанию Сложные поля структуры не читаются

Есть тип-структура с различными полями - юнионами и структурами. Но почему-то в исходной форме компилятор не видит эти поля и ругается, что "MyType has no member named <...>".

Код:
typedef struct
{
    struct
    {
        WORD f1	:13;
        WORD f2	:2;
        WORD f3	:1;
    };
    CHAR fr;
    union
    {
        BYTE fr1;
        BYTE fr2;
    };

    BYTE Mod;
    union
        {
            struct
            {
                WORD sr;
            };
            union
            {
                WORD raw;
                struct
                {
                    WORD d1		:2;
                    WORD d2		:2;
                    WORD d3		:2;
                    WORD d4		:1;
                    WORD d5		:3;
                    WORD d6		:3;
                    WORD d7		:2;
                    WORD d8		:1;
                };
            };
            struct
            {
                BYTE a1;
                BYTE a2		:4;
                BYTE a3		:2;
                BYTE a4		:2;
            };
        };

} MyType;
Если выкинуть все упаковки по структурам и объединениям, то есть просто по порядку все поля перечислить, все нормально:

Код:
typedef struct
{
   WORD f1	:13;
   WORD f2	:2;
   WORD f3	:1;

    CHAR fr;

    BYTE fr1;
    BYTE fr2;
    BYTE Mod;

    WORD sr;
    WORD raw;
    WORD d1		:2;
    WORD d2		:2;
    WORD d3		:2;
    WORD d4		:1;
    WORD d5		:3;
    WORD d6		:3;
    WORD d7		:2;
    WORD d8		:1;

    BYTE a1;
    BYTE a2		:4;
    BYTE a3		:2;
    BYTE a4		:2;

} MyType;
но такой вариант не походит, нужно сохранить исходную структуру.

У кого-нибудь есть идеи почему такое может быть?
tiger() вне форума Ответить с цитированием
Старый 30.01.2014, 14:26   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

может потому что ваши структуры и юнионы не имеют имен?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 30.01.2014, 15:52   #3
tiger()
Пользователь
 
Регистрация: 09.04.2011
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
может потому что ваши структуры и юнионы не имеют имен?
Видимо, да.
Насколько я понял из гугла, такие неименованные структуры проходят только в стандарте C89, а мне нужен C99 стандарт.
Переделывать придется много. Либо структуры именовать, но тогда в каждом вызове добавляются новые идентификаторы, либо полностью модуль переделывать.

Мда, теперь понятно, почему никогда лучше не использовать недокументированные функции.
tiger() вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Недоступность поля структуры andreil Общие вопросы C/C++ 2 14.12.2013 11:30
Проверка поля структуры на уникальность Mycroft Общие вопросы C/C++ 6 20.03.2013 17:39
поясните смысл объявления поля структуры veniside Общие вопросы C/C++ 15 02.06.2011 02:58
Удаление(добавление) поля из(в) структуры kilgoreq Помощь студентам 0 22.02.2011 00:59