2012-12-05 48 views
0

我有一个非常简单的问题:我想在另一个结构中使用结构,但我希望能够以任何我想要的顺序定义它们。 类似这样的:以任何顺序在结构内部使用结构(C)

// User type definition 
typedef struct type1{ 
    int i; 
    type2 t; 
}; 
// User type definition 
typedef struct type2{ 
    int i; 
    type3 t; 
}; 
// User type definition 
typedef struct type3{ 
    int i; 
}; 

我该怎么做?

+1

你不能........ – Dani

+0

在不同的结构之间必须有一个部分的顺序,你应该遵循你声明的顺序 – igon

+1

注意:你的typedef缺少一个typedef名字,它应该是'typedef struct type2 {int i; type3 t;例如,} type2;'。 –

回答

1

这是可以实现的唯一方法是通过使用指针的结构,而不是静态成员:

typedef struct type1 { 
    int i; 
    struct type2 *t; 
} type1; 
// User type definition 
typedef struct type2 { 
    int i; 
    struct type3 *t; 
} type2; 
// User type definition 
typedef struct type3 { 
    int i; 
} type3; 

这样做的原因是编译器必须知道的结构有多大,因为它得到它。如果你使用指针,所有编译器需要知道的是,结构类型只是存在,因为给定架构上的指针类型在编译时已知大小

+0

既不使用头文件? –

+0

@TommasoDeSica我很抱歉,我不明白你在问什么。我的方法可以使用前向声明来完成。这是一种简单的告诉编译器的方法:“这个结构将在后面定义,我保证,我只需要让你知道它存在” –

+0

这个解决方案只适用于C或C++吗?我试过C++编译器(现在我只有这个),并且收到一个错误。 –