2013-07-25 100 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