我有一个类,在类中有一些简单的结构(简化代码):
typedef struct
{
Struct2* str2;
}Struct1;
typedef struct
{
Struct3* str3;
Struct1* str1;
}Struct2;
typedef struct
{
Struct1* str1;
Struct2* str2;
Struct3* str3;
}Struct3;
当然,这给了我语法错误。所以我转发声明每一个,但这不起作用因为我有重新定义。我想避免将每个结构放在一个单独的文件中;那可能吗?
答案 0 :(得分:5)
不要将每个类型声明为typedef
,而是像使用类一样使用struct
关键字。那么你的定义看起来不像是对前向声明的重新定义。
struct Struct1;
struct Struct2;
struct Struct1
{
Struct2* str2;
};
答案 1 :(得分:1)
使用前向声明并定义结构而不使用typedef
,如下:
struct Struct2; //forward declaration
struct Struct3; //forward declaration
struct Struct1
{
Struct2* str2; //here Struct2 is known to be a struct (to be defined later though)
};
struct Struct2
{
Struct3* str3; //here Struct3 is known to be a struct (to be defined later though)
Struct1* str1;
};
struct Struct3
{
Struct1* str1;
Struct2* str2;
Struct3* str3;
};
答案 2 :(得分:0)
你可以像这样向前声明:
typedef struct Struct1 Struct1;
typedef struct Struct2 Struct2;
typedef struct Struct3 Struct3;
你解决了这个问题:
struct Struct2 { ... };
我使用了命名结构,所以这是有效的C或C ++。正如Nawaz指出的那样,在C ++中根本不需要typedef。在C ++中,struct的名称自动成为一个类型,但在C中它不是。
这是整个单位:
#include <stdio.h>
typedef struct Struct1 Struct1;
typedef struct Struct2 Struct2;
typedef struct Struct3 Struct3;
struct Struct1 {
Struct2* str2;
} ;
struct Struct2 {
Struct3* str3;
Struct1* str1;
} ;
struct Struct3 {
Struct1* str1;
Struct2* str2;
Struct3* str3;
} ;
int main()
{
printf("Size of Struct1: %d\n", sizeof(Struct1));
printf("Size of Struct2: %d\n", sizeof(Struct2));
printf("Size of Struct3: %d\n", sizeof(Struct3));
}