Форум программистов, компьютерный форум CyberForum.ru

Ошибка error C2070: 'unsigned int': illegal sizeof operand - C++

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.78
seravr
1 / 1 / 0
Регистрация: 11.11.2008
Сообщений: 34
06.01.2009, 02:02     Ошибка error C2070: 'unsigned int': illegal sizeof operand #1
Собственно, есть пара вопросов (смотреть в комментариях). Помогите разобраться пожалуйста

Заранее спасибо Всем

Пример части кода:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include<iostream>
 
using std::cin;
using std::cout;
using std::endl;
using std::hex;
using std::dec;
 
#pragma pack(2)
 
void typeOutDWORD(const DWORD name);
void typeOutHexDWORD(const DWORD name);
 
union DWORD  
{
    unsigned long word;
    struct BYTE
    {
        unsigned lowBit:16;
        unsigned HighBit:16;
    } byte;
};
 
int main ()
{
    DWORD Name;
 
    cout<<"Size DWORD="<<sizeof(DWORD)<<endl;    //выводит Size DWORD=4
    cout<<"Size word="<<sizeof(Name.word)<<endl; //выводит Size word==4
    cout<<"Size byte"<<sizeof(Name.byte)<<endl;  //выводит Size byte=4
 
//  Вопрос №1:
 
//  если я хочу узнать размер Name.byte.lowBit || Name.byte.HighBit путем
 
//  cout<<"Size byte"<<sizeof(bmpName.byte.HighBit)<<endl
 
//  cout<<"Size byte"<<sizeof(bmpName.byte.lowBit)<<endl
 
// VS2008  пишет: error C2070: 'unsigned int': illegal sizeof operand
// собственно, прошу помочь разобраться в ошибке и понять, как правильно мне // определить размер элемента структуры объединения
 
// Вопрос №2:
 
// заполняю поля структуры
bmpName.byte.HighBit='B';
bmpName.byte.lowBit='M';
 
 
typeOutDWORD(bmpName);// выводит BM
cout<<endl;
typeOutHexDWORD(bmpName);// выводит 424d
 
// но если я хочу сразу вывести содержимое путем
 
cout<<bmpName.word<<endl; 
 
// выводит 42004d подскажите почему? Так должно быть?
// Как мне вывести просто 424d? Откуда беруться нули?
 
return 0;
}
 
// функция вывода на экран содержимого DWORD в формате 0xff
void typeOutHexDWORD(const DWORD name)
{
    cout<<hex<<name.byte.HighBit
        <<name.byte.lowBit<<"\n";
}
 
 
// функция вывода на экран содержимого DWORD в формате ASCII
void typeOutDWORD(const DWORD name)
{
    cout.put(name.byte.HighBit);
    cout.put(name.byte.lowBit);
}
Добавлено через 3 минуты 50 секунд
Извините, ошибочку сделал, в коде вместо bmpName должно просто Name(не могу редактировать сообщение)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.01.2009, 02:02     Ошибка error C2070: 'unsigned int': illegal sizeof operand
Посмотрите здесь:

C++ Sizeof и структура с int
error C2601: 'main' : local function definitions are illegal fatal error C1004: unexpected end of file found C++
C++ Поместить двоичный код, в веденной строке, в переменную типа int и unsigned int.
C++ Разница int, short, unsigned int, unsigned short
C++ Определение типов. Приведение int к unsigned int
Ошибка при компиляции error: cannot convert ‘int (*)[5]’ to ‘int**’ for argument ‘1’ to ‘void Replase(int**)' C++
C++ Error C2440: <function-style-cast>: невозможно преобразовать "unsigned int" в "std::bitset<_Bits>"
C++ Error LNK2019: unresolved external symbol "public: __thiscall Vector<int>::Vector<int>(int,int,int)" (?0?$Vec
C++ Error: lvalue required as left operand of assignment. Не могу разобраться где ошибка
C++ Ошибка error: invalid types 'int[int]' for array subscript
Как исправить ошибку невозможно преобразовать аргумент 1 из "unsigned int" в "unsigned int []"? C++
С++ ошибка error C4430: missing type specifier - int assumed. Note: C++ does not support default-int C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ISergey
Maniac
Эксперт С++
 Аватар для ISergey
1345 / 878 / 51
Регистрация: 02.01.2009
Сообщений: 2,642
Записей в блоге: 1
06.01.2009, 04:02     Ошибка error C2070: 'unsigned int': illegal sizeof operand #2
Цитата Сообщение от seravr Посмотреть сообщение
//VS2008 пишет: error C2070: 'unsigned int': illegal sizeof operand
компелятор ругается на ето
C++
1
2
unsigned lowBit:16;
unsigned HighBit:16;
Добавлено через 54 минуты 54 секунды
Цитата Сообщение от seravr Посмотреть сообщение
определить размер элемента структуры объединения
вобщето размер объединения всегда должен - равнятся размеру сомого большого элемена.
seravr
1 / 1 / 0
Регистрация: 11.11.2008
Сообщений: 34
06.01.2009, 23:50  [ТС]     Ошибка error C2070: 'unsigned int': illegal sizeof operand #3
точно, спасибо, чё-то сглупил.

А как быть со вторым вопросом??? почему выводиться в виде 42004d? Там что-то не то? Если размер объединения равен unsigned long( 4байта), а два поля структуры по unsigned int (2 байта), то по сути там должно храниться число в формате 424d(см. код) Почему?

Добавлено через 4 часа 36 минут 31 секунду
еще один вопрос не ясен, про bmp формат

для Windows 98/Me, Windows 2000/XP должна использоваться структура BITMAPV5HEADER
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
typedef struct { 
DWORD bV5Size; 
LONG bV5Width; 
LONG bV5Height; 
WORD bV5Planes; 
WORD bV5BitCount; 
DWORD bV5Compression; 
DWORD bV5SizeImage; 
LONG bV5XPelsPerMeter; 
LONG bV5YPelsPerMeter; 
DWORD bV5ClrUsed; 
DWORD bV5ClrImportant; 
DWORD bV5RedMask; 
DWORD bV5GreenMask; 
DWORD bV5BlueMask; 
DWORD bV5AlphaMask; 
DWORD bV5CSType; 
CIEXYZTRIPLE bV5Endpoints; 
DWORD bV5GammaRed; 
DWORD bV5GammaGreen; 
DWORD bV5GammaBlue; 
DWORD bV5Intent; 
DWORD bV5ProfileData; 
DWORD bV5ProfileSize; 
DWORD bV5Reserved; 
} BITMAPV5HEADER, *PBITMAPV5HEADER;
в ней есть элемент-структура CIEXYZTRIPLE bV5Endpoints:
C++
1
2
3
4
5
6
typedef struct tagCIEXYZTRIPLE {
CIEXYZ ciexyzRed;
CIEXYZ ciexyzGreen;
CIEXYZ ciexyzBlue;
} CIEXYZTRIPLE;
typedef CIEXYZTRIPLE FAR* LPCIEXYZTRIPLE;
а в ней есть структура:
C++
1
2
3
4
5
6
typedef struct tagCIEXYZ {
FXPT2DOT30 ciexyzX;
FXPT2DOT30 ciexyzY;
FXPT2DOT30 ciexyzZ;
} CIEXYZ;
typedef CIEXYZ FAR* LPCIEXYZ;
Вопрос, что за тип FXPT2DOT30, помогите разобраться пожалуйста

Добавлено через 55 минут 47 секунд
Вообщем, разобрался,

Скажите плиз эти строки равносильны:
C++
1
typedef long FXPT2DOT30;
и
C++
1
#define long FXPT2DOT30;
Добавлено через 8 часов 8 минут 19 секунд
Модератор, удалите плиз данный топик, я разобрался со всеми вопросами
Casper!
 Аватар для Casper!
15 / 14 / 1
Регистрация: 02.09.2008
Сообщений: 167
07.01.2009, 12:04     Ошибка error C2070: 'unsigned int': illegal sizeof operand #4
некогда не пробывал заменить это
C++
1
2
3
4
5
using std::cin;
using std::cout;
using std::endl;
using std::hex;
using std::dec;
на это
C++
1
using namespace std;
seravr
1 / 1 / 0
Регистрация: 11.11.2008
Сообщений: 34
07.01.2009, 12:29  [ТС]     Ошибка error C2070: 'unsigned int': illegal sizeof operand #5
нет, надо попробовать
Yandex
Объявления
07.01.2009, 12:29     Ошибка error C2070: 'unsigned int': illegal sizeof operand
Ответ Создать тему
Опции темы

Текущее время: 08:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru