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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получение данных из Объединения, Как правильно сместится на указатель. 
:(
    Опции темы
EgorTheBlade
Дата 12.10.2010, 12:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добрый День.Есть такой код
Код

union base {
Class A;
Class B;
Class C;
}obj;
write(obj->A->value); // А пишет правильно.А и приходит т.к имеет наибольший размер.
write(obj->B->value);

Как записать данные классов B и C.Нужно сместится на указатель,но у меня пока не выходит.Кто нибудь сталкивался с чем то подобным.
Заранее спасибо.

Это сообщение отредактировал(а) EgorTheBlade - 12.10.2010, 12:58
PM MAIL Skype   Вверх
mes
Дата 12.10.2010, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



в юнионе память для всех составляющих общая, алсо никуда смещаться не надо, но объекты должны быть совместимые, иначе Вы записывая один, испортите другой ..

Добавлено через 24 секунды
может Вам не union нужен, a struct ?

Добавлено через 1 минуту и 34 секунды
пригляделся к коду, у Вас обьъекты одного класса, позвольте узнать зачем тогда union ?!


--------------------
PM MAIL WWW   Вверх
EgorTheBlade
Дата 12.10.2010, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



три класса разных. 
PM MAIL Skype   Вверх
djamshud
Дата 12.10.2010, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пердупержденный
***


Профиль
Группа: Завсегдатай
Сообщений: 1655
Регистрация: 23.11.2009

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



Нужно во всех классах сделать одинаковые выравнивание для совместно используемых value. Это можно сделать забиванием пустого места фейковыми массивами или смотреть документацию к своему компилятору - каждый делает по-своему.


--------------------
'Cuz I never walk away from what I know is right
Alice Cooper - Freedom
PM   Вверх
EgorTheBlade
Дата 12.10.2010, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Заработало.Я нашел способ:
    
Код

A* aobj = (A*)obj->fields;// тут лежит первый объект с наибольшим значением Сделан через массив
            for(int i = 0; i < obj->Afileds;i++){
            write(aobj);
                         aobj++;
            }

            B* bojb = (B*) aobj;
            for(...){
                               write(bobj);
                bobj++;
            }

так же для C класса  и т.д

Это сообщение отредактировал(а) EgorTheBlade - 12.10.2010, 14:56
PM MAIL Skype   Вверх
mes
Дата 12.10.2010, 16:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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




Цитата(EgorTheBlade @  12.10.2010,  13:47 Найти цитируемый пост)
Заработало.Я нашел способ:

 smile  smile 



--------------------
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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