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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.03.2011, 19:43   #1
Farrel
Форумчанин
 
Аватар для Farrel
 
Регистрация: 21.04.2010
Сообщений: 144
По умолчанию Итератор по полю бит

В общем необходимо обработать несколько сообщений, длиной в неск. бит каждое, записать их в файл. Соответственно единственный выход, какой я вижу, использовать в качестве буфера поле бит и в нём соответственно надо как-то ориентироваться. Я попытался перегрузить для поля оператор [].
Код:
unsigned& bitfieldextended::operator [] (int i)
{
	switch(i)
	{
	case 1:return field.i1;break;
	case 2:return field.i2;break;
	case 3:return field.i3;break;
	case 4:return field.i4;break;
	case 5:return field.i5;break;
	case 6:return field.i6;break;
	case 7:return field.i7;break;
	case 8:return field.i8;break;
	}
	return NULL;
}
получил от компилятора следующее
1>c:\users\technodrive\documents\vi sual studio 2010\projects\курсач\курсач\bitfiel dextended.h(19): error C2440: 'return' : cannot convert from 'unsigned int' to 'unsigned int &'
попробовал возвращать указатели, получил такое
1>c:\users\technodrive\documents\vi sual studio 2010\projects\курсач\курсач\bitfiel dextended.h(12): error C2104: '&' on bit field ignored
может кто занимался итераторами для полей?
Просто очень нужна возможность обращаться к элементам поля как к массиву.
Farrel вне форума Ответить с цитированием
Старый 13.03.2011, 19:57   #2
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

зачем ссылку возвращаешь?
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 13.03.2011, 19:58   #3
Farrel
Форумчанин
 
Аватар для Farrel
 
Регистрация: 21.04.2010
Сообщений: 144
По умолчанию

Временно решил проблему сделав такуб функцию
Код:
void basefileoperator::set(int i, unsigned var)
{
	switch(i)
	{
		case 1: field.i1=var;break;
		case 2: field.i2=var;break;
		case 3: field.i3=var;break;
		case 4: field.i4=var;break;
		case 5: field.i5=var;break;
		case 6: field.i6=var;break;
		case 7: field.i7=var;break;
		case 8: field.i8=var;break;
	}
}
но может полноценный итератор кто-нить делал?
Farrel вне форума Ответить с цитированием
Старый 13.03.2011, 20:01   #4
Farrel
Форумчанин
 
Аватар для Farrel
 
Регистрация: 21.04.2010
Сообщений: 144
По умолчанию

Ссылку, так как хотел сделать отдельным классом поле и просто чтобы другим объектом (то есть методом любого объекта) можно было поправить значение.
Farrel вне форума Ответить с цитированием
Старый 13.03.2011, 20:03   #5
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

switch тут не нужен

Код:
set
field |= ((field >> i) | 1) << i;
только i должен принадлежать промежутку [0..7]. и обычно такие вещи зарывают в макрос, а не функции
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 13.03.2011 в 20:18.
pproger вне форума Ответить с цитированием
Старый 13.03.2011, 20:05   #6
Farrel
Форумчанин
 
Аватар для Farrel
 
Регистрация: 21.04.2010
Сообщений: 144
По умолчанию

так, с этого момента поподробнее, что за |=
да и вообще код поясни, я с макросами не работал
Farrel вне форума Ответить с цитированием
Старый 13.03.2011, 20:10   #7
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

2Farrel
что тут пояснять то? работа с битовыми операциями тривиальная
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 13.03.2011, 20:13   #8
Farrel
Форумчанин
 
Аватар для Farrel
 
Регистрация: 21.04.2010
Сообщений: 144
По умолчанию

не, ну скажем это ты просто кусок кода выложил, или как? ты ведь set не передал ничего

и снова же что значит |=
Farrel вне форума Ответить с цитированием
Старый 13.03.2011, 20:18   #9
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

a |= b тоже самое, что a = a | b
| побитовое ИЛИ
NiCola999 вне форума Ответить с цитированием
Старый 13.03.2011, 20:21   #10
Farrel
Форумчанин
 
Аватар для Farrel
 
Регистрация: 21.04.2010
Сообщений: 144
По умолчанию

а, точно блин, а я то думал новое что-то появилось
я что по поводу параметров для set unset ну и вообще как оно оформляется
кстати, в чём фишка макросов?
работают быстрее?

Последний раз редактировалось Farrel; 13.03.2011 в 20:24.
Farrel вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Итератор списка по значению Link0 Общие вопросы по Java, Java SE, Kotlin 0 21.11.2010 14:02
Ковертирование из png 24 бит в png 8 бит isat Общие вопросы .NET 0 22.03.2010 13:38
Итератор к шаблону Crucian Общие вопросы C/C++ 5 29.10.2007 16:52