typedef
объявляет псевдоним для имени типа. Он не объявляет переменную. Вы не можете использовать имя типа в выражении, как если бы оно было именем переменной.
Если вы намеревались объявить членов класса, отбросьте typedef
. Также не используйте typedef struct
в C ++. Он используется в C, но избыточен в C ++. Класс может быть определен напрямую без typedef
:
struct MIDI_CHUNK_HEADER {
char MThd[4];
uint32_t ChunckSize[4];
uint16_t Format[2];
uint16_t Track[2];
uint16_t TimeDivision[2];
};
Более того, вы не можете выводить массивы напрямую с помощью <<
. Вместо этого будет напечатан адрес первого элемента массива, за исключением случая массивов char
(которые будут интерпретироваться как строки с нулевым символом в конце C). Вам нужно l oop поверх отдельных элементов и выводить каждый из них по отдельности.
(Не смотря на спецификацию формата заголовка блока MIDI :) Похоже, что вам вообще не нужны массивы. Если вы хотите, например, чтобы ChunckSize
представлял 4 байта, то вам нужно только один uint32_t
(что составляет 32 бита, равных уже 4 байта само по себе), а не четыре из них:
struct MIDI_CHUNK_HEADER {
char MThd[4];
uint32_t ChunckSize;
uint16_t Format;
uint16_t Track;
uint16_t TimeDivision;
};
Пожалуйста, изучите язык из хорошей книги . Это объяснило бы, как все работает структурированным образом, и вы не допустили бы ошибок, таких как typedef
здесь. Изучение C ++ неструктурированным способом не продвинет вас далеко. С ++ слишком не прощает ошибок.