У вашего подхода есть две проблемы:
Во-первых, он требует правильного определения размеров.Используйте sizeof
, чтобы сделать это.Итак, ваш массив будет выглядеть так:
size_t sizeOfStructAttributes = {sizeof(wheather_struct::packet_id),
sizeof(wheather_struct::packet_size),
sizeof(wheather_struct::cloudLayerAltitude) };
Вторая (более серьезная) проблема заключается в том, что вы не допускаете заполнение в своей структуре.Почти все компиляторы будут (если не указано иное) вставлять байт заполнения между packet_id и packet_size, чтобы все было хорошо выровнено.К счастью, для этого тоже есть решение - используйте макрос offsetof
(определенный в stddef.h):
size_t offsetOfStructAttributes = {offsetof(wheather_struct, packet_id),
offsetof(wheather_struct, packet_size),
offsetof(wheather_struct, cloudLayerAltitude) };
Код становится:
for (size_t offset: offsetsOfStructAttributes) {
pointer = &(this->wheather_struct->packetID) + offset
cout << pointer << ' ';
}
Фактически:Приведенный выше код исправляет третью проблему с вашим кодом: sizeof()
возвращает размер в байтах, который вряд ли будет числом элементов.
Наконец, ваши переменные имеют опечатку: метеорология занимается вопросом, будет ли погодабыть в порядке или нет.Вы перепутали два слова, и я уверен, что вы имеете в виду «погода».