Я пишу код для связи с микроконтроллерами, используя последовательный (UART).
Я получаю данные, которые могут быть расположены во многих различных конфигурациях.
Некоторые пакеты могут содержать поплавки, другие - только символы. и т.д.В C Я могу инициализировать структуру typedef, используя массив байтов, но на C++ я не могу, есть ли способ обойти это?
Вот что я имею в C, и она работает просто отлично:
#define packed __attribute__((packed))
//this is a typedef struct I used,
typedef struct packed {
uint8_t cmd;
uint8_t src_uart;
uint8_t dst_uart;
void* stuff;}const * P_generic_t;
//then i do the following to extract formatted info from my buffer
//where pbuf->payload is an array of uint8_t(aka unsigned char)
P_generic_t cg = (void *) pbuf->payload;
Тогда я могу просто получить доступ к члену структуры, делая cg->cmd
или cg->src_uart
. Однако в C++ этот метод не работает.
Причина, по которой я сейчас использую C++, заключается в том, что я хочу использовать этот код для Arduino для побочного проекта, и я хочу надежный способ эффективного извлечения данных из моего буфера. Я получаю следующее сообщение об ошибке:
comclass.cpp:82: error: invalid conversion from 'void*' to 'P_simple_t {aka const<anonymous struct>*}' [-fpermissive]
Я также пытался запустить этот код с помощью компилятора на cloud9 и я получаю подобную ошибку. Есть ли способ инициализировать мою структуру, как я сделал в C? Или есть лучший вариант?
Я знаю, что есть способ запустить определенную часть кода как C, используя extern 'C'
, (извините, я не знаю синтаксиса). Это вариант?
«этот метод не работает», что * точно * вы пробовали? Показать реальный код и любой выход компилятора –
'(void *) pbuf-> payload' ->' (P_generic_t) pbuf-> payload'. C++ не допускает неявное преобразование в и из 'void *' так же свободно, как C. – DeiDei
Никогда не указывайте указатели 'typedef' на типы данных (вводит' * 'reall ymore сложнее, чем печатать' P_' ??)! И использование квалификатора 'const' после того, как спецификатор типа затрудняет чтение. И не используйте броски, если вы им не нужны, и не знаете все последствия. Сказал: почему вы ожидаете, что два разных языка ведут себя одинаково, просто потому, что здесь используется один и тот же синтаксис? – Olaf