2013-07-25 167 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中有'new'嗎?你的意思是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 *' 錯誤:預期';' –

+0

@TonyHuy我只是解決了這個問題 - 看看演示。錯誤是因爲類型名稱和成員名稱相同。您是否可以更改該工具來爲該類型或字段生成不同的名稱? – dasblinkenlight