在同一类中向前声明类型
Forward declaration of types in the same class
我有一个类,里面有几个简单的结构体,像这样(简化代码):
typedef struct
{
Struct2* str2;
}Struct1;
typedef struct
{
Struct3* str3;
Struct1* str1;
}Struct2;
typedef struct
{
Struct1* str1;
Struct2* str2;
Struct3* str3;
}Struct3;
当然会导致语法错误。所以我向前声明了每一个,但这不起作用,因为我有重新定义。我想避免把每个结构放在一个单独的文件中;这可能吗?
与其将每个类型声明为typedef
,不如像使用类一样使用struct
关键字。这样你的定义看起来就不会像前向声明的重新定义了。
struct Struct1;
struct Struct2;
struct Struct1
{
Struct2* str2;
};
使用前向声明和定义结构体而不使用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;
};
您可以像这样转发声明它们:
typedef struct Struct1 Struct1;
typedef struct Struct2 Struct2;
typedef struct Struct3 Struct3;
你这样解析它们:
struct Struct2 { ... };
我使用了命名结构,所以这是有效的C或c++。正如Nawaz指出的,在c++中根本不需要类型定义。在c++中,结构体的名称自动成为类型,但在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: %dn", sizeof(Struct1));
printf("Size of Struct2: %dn", sizeof(Struct2));
printf("Size of Struct3: %dn", sizeof(Struct3));
}
相关文章:
- std::enable_if 更改成员 *变量* 声明/类型
- 对前向声明类型进行unique_ptr的解决方法
- 如何将声明类型作为参数发送
- 在 Fortran 中泛化特定声明类型的操作
- 使用 (c++11) 声明类型时放置 __declspec(dllimport) 关键字的位置
- 模板函数可以使用带有删除的构造函数的声明类型
- 声明类型没有任何可变类型
- 如何使用声明类型简化此代码
- 使用声明类型选择函数专业化
- 替代班级内声明类型的别名
- 对于自动键入推论的参数,声明类型(自动)应推导的内容
- 使用 decltype 的条件声明类型
- 您如何声明类型结构的堆栈?在C 中
- 将指向前向声明类型的指针推送到 typedef'd 向量时出现编译器错误
- 声明适用于 auto,但不能显式声明类型?
- 声明类型包含未展开的参数包'Args'
- 课堂上的Typedef.在另一个类错误中:尚未声明类型
- 冲突的声明类型/价值不匹配
- 获取具有AST访问者clang的功能声明类型
- 变量声明类型定义 C 中的约定