2015-06-23 2 views
-4

У меня есть следующий код, который я должен преобразовать из C++ в C:Заполнение структуры в C

const MyStruct &r = pMyContext->buffer [counter]; 

первую очередь, я не понимаю, что здесь происходит. Я полагаю, эта строка создает новый экземпляр структуры (r) и заполняет свой адрес содержимым буфера?

Я разрабатываю драйвер устройства, компилятор Си возвращает:

error C2143: syntax error : missing ';' before '&' 

Любые идеи?

EDIT:

В Мой заголовок у меня есть:

#define MAX_BUFFER_SIZE 40U 

typedef struct { 
int a; 
int b; 
}buffer_entry_t; 

typedef struct _DEVICE_CONTEXT 
{ 
buffer_entry_t m_tBuffer[MAX_BUFFER_SIZE]; 
} 
DEVICE_CONTEXT, *PDEVICE_CONTEXT; 

Благодаря

+1

Это создает константу * reference * в 'pMyContext-> buffer [counter]'. Ссылки похожи на указатели, но более безопасны и не требуют разыменования для их использования. Вы хотите изменить этот код, чтобы вместо этого использовать указатель. – slugonamission

+0

'const MyStruct * r = & pMyContext-> buffer [counter]; '? то я могу обратиться к структуре через '& r->'? – moonraker

+0

@moonraker * 'r->' – emlai

ответ

0
const MyStruct &r = pMyContext->buffer [counter]; 

pMyContext является экземпляром класса (предположим Названный класс X) в C++, надеюсь, вы можете преобразуйте его как экземпляр structure X. buffer - массив из MyStruct внутри класса X в C++, вы можете преобразовать его в массив внутри MyStruct. counter является индексом массива

Таким образом, вы можете создать const указатель на структуру MYStruct в r в C и назначить элемент массива из MyStruct с индексом counter внешней структуры X.

struct X pMyContext; 
const MyStruct * r= pMyContext.buffer [counter]; 
+0

спасибо за это. Я обновил вопрос, чтобы включить детали заголовка. Я получаю сообщение об ошибке «Ошибка ошибка C2440:« initializing »: невозможно преобразовать из« buffer_entry_t »в« const buffer_entry_t »' – moonraker

+0

Изменить 'const buffer_entry_t *' на 'const buffer_entry_t' – Steephen

0

Как кто-то уже сказал, что он создает постоянную ссылку на pMyContext->buffer [counter]. (Подробнее о C++ ссылок: Reference (C++) и What is a reference)

Чтобы преобразовать его из C++ в C, вы должны сделать это указатель, а затем вместо r.someStructMember вы должны написать r->someStructMember, а также помнить, что вам может понадобиться разыменовать него а также (*r вместо r).

Смежные вопросы