|
C++ и массивы констант., А в чистом C работало ... |
|
|
|
Dec 9 2009, 07:49
|

Местный
  
Группа: Участник
Сообщений: 209
Регистрация: 7-12-04
Из: Томск
Пользователь №: 1 382

|
Есть следующий код: Код typedef union { uint32_t p; float f; } tUnion; typedef struct { uint8_t type; uint8_t info[4]; tUnion u; } tItem; const tItem i[] = { {2, {1,2,4,2}, .u.f=1.5}, {1, {2,2,4,2}, .u.p=10}, {2, {3,2,4,2}, .u.f=2.3} }; В чистом C замечательно компилируется и работает. А вот как написать подобное в C++?
|
|
|
|
|
Dec 9 2009, 08:52
|

Местный
  
Группа: Участник
Сообщений: 209
Регистрация: 7-12-04
Из: Томск
Пользователь №: 1 382

|
Цитата(VladimirYU @ Dec 9 2009, 14:29)  Код struct TItem { .......... Поясните. Что-то немогу понять как оно поможет. Цитата(Methane @ Dec 9 2009, 14:37)  Поменяйте местами. А смысл? Будет к другому типу приводить и ругаться в другом месте. Цитата(jorikdima @ Dec 9 2009, 14:49)  Создайте отдельный модуль и компилируйте его и только его в С. Затем в остальную плюсовую программу подключаете данные из сишного модуля, пользуя extern "C" Похоже так и придётся сделать ...
|
|
|
|
|
Dec 9 2009, 09:15
|
Местный
  
Группа: Свой
Сообщений: 279
Регистрация: 2-07-08
Из: Новосибирск
Пользователь №: 38 699

|
Цитата(jorikdima @ Dec 9 2009, 13:00)  предполагаю РАМ ибо сущность tItem i[] = уже не сможет быть константой. Те стоит задача запихнуть этот массив в ROM (например - во флешь)? Цитата(jorikdima @ Dec 9 2009, 13:00)  предполагаю РАМ ибо сущность tItem i[] = уже не сможет быть константой. Кстати, почему? Этот код собирается прекрасно Код typedef struct sss { BYTE a; BYTE b; sss(BYTE bA_, BYTE bB_):a(bA_),b(bB_){} };
static const sss sSss_ = sss(1,2); static const sss asSSS_[] = {sss(1,2),sss(3,4),sss(5,6)};
|
|
|
|
|
Dec 9 2009, 09:50
|

Гуру
     
Группа: Свой
Сообщений: 3 615
Регистрация: 12-01-09
Из: США, Главное разведовательное управление
Пользователь №: 43 230

|
Цитата(Dima_G @ Dec 9 2009, 11:15)  sss(BYTE bA_, BYTE bB_):a(bA_),b(bB_){}
static const sss sSss_ = sss(1,2); static const sss asSSS_[] = {sss(1,2),sss(3,4),sss(5,6)};[/code] Никогда такого не видел. Хоть как называется? Это стандартная фича или расширение IAR?
|
|
|
|
|
Dec 9 2009, 09:51
|

Частый гость
 
Группа: Свой
Сообщений: 107
Регистрация: 6-09-06
Из: Москва
Пользователь №: 20 118

|
Вообще-то и первоначальный код прекрасно собрался. Пришлось только типы объявить. Компилятор IAR 5.11B for AVR, что при Embedded C++, что при Extended Embedded C++. Что я не так делаю? Код typedef unsigned char uint8_t; typedef unsigned long uint32_t;
typedef union { uint32_t p; float f; } tUnion;
typedef struct { uint8_t type; uint8_t info[4]; tUnion u; } tItem;
const tItem Item[] = { {2, {1,2,4,2}, .u.f=1.5}, {1, {2,2,4,2}, .u.p=10}, {2, {3,2,4,2}, .u.f=2.3} }; P.S. Может расширение файла поменять нужно на cpp
Причина редактирования: Оформление цитаты исходника.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|