2013-07-25 2 views
0

У меня есть структура C, сгенерированная внешним инструментом. Это выглядит следующим образом:Ссылка на структуру внутри структуры

typedef struct externalStruct{ 
    int msgID; 
    struct internalStruct {  
     long someValue; 
    } *internalStruct ; 
} externalStruct_t; 

Выполните следующие действия листьев internalStruct указал на некоторое случайное значение в куче:

externalStruct_t* newExternalStruct = new externalStruct_t; 

Так вот мой вопрос:

Как правильно создать экземпляр указатель " internalStruct "?

+1

Вы не можете использовать 'new' для создания экземпляра в C, возможно, вы имели в виду C++? – Kninnug

+1

'новый' в C? Вы имеете в виду C++, или вы ищете 'malloc (sizeof (externalStruct_t))'? –

ответ

1

Вот как вы можете это сделать в C (C99 demo):

externalStruct_t* newExternalStruct = malloc(sizeof(externalStruct_t)); 
newExternalStruct->internalStruct = malloc(sizeof(*newExternalStruct->internalStruct)); 

В C++ вам нужно будет вставить слепки (C++ demo):

externalStruct_t* newExternalStruct = new externalStruct_t; 
// You need to rename internalStruct to internalStructType 
// to avoid a naming collision: 
newExternalStruct->internalStruct = new externalStruct::internalStructType; 
+0

Я пробовал это, и ошибка, которую я получаю, это: ошибка: ожидаемый тип-спецификатор ошибка: не может преобразовать 'int *' в 'externalStruct :: internalStruct *' при назначении error: expected ';' –

+0

@TonyHuy Я просто исправил это - взгляните на демо. Ошибка связана с тем, что имя типа и имя элемента совпадают. Можете ли вы изменить инструмент для создания другого имени для типа или для поля? – dasblinkenlight

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