![](/img/trans.png)
[英]How do I fix an error in a header file typedef struct (expected a “;”)?
[英]How do I refer to a typedef in a header file?
我有一个源文件,其中定义了一个typedef结构:
typedef struct node {
char *key;
char *value;
struct node *next;
} *Node;
在此模块中,有一些函数在Node上运行,并将Node作为返回类型。 我应该在这个typedef的头文件中写什么?
写作是正确的
typedef *Node;
在标题?
您可以使用:
typedef struct node * Node;
但我建议不要将指针隐藏在类型声明中。 在变量声明中提供该信息更具信息性。
的module.c:
#include "module.h"
struct node {
char *key;
char *value;
struct node *next;
};
module.h中:
typedef struct node Node;
某处指针的变量声明:
#include "module.h"
Node * myNode; // We don't need to know the whole type when declaring pointer
声明
typedef *Node;
是无效的。 它缺少类型。 查看typedef
一个好方法是记住它只是一个存储类说明符,因此,它的工作方式与其他任何声明一样。 如果要为类型struct node *
创建别名Node
,只需声明一个节点指针并将其命名为Node
:
struct node *Node;
现在预先添加一个typedef
关键字:
typedef struct node *Node;
通常,要为类型创建别名,只需声明一个与您希望的别名同名的该类型的变量,然后添加一个typedef
关键字。 甚至复杂的typedef
声明也可以像这样轻松接近。
所以, typedef *Node;
是无效的,就像写j;
没有实际指定其类型。
现在,你不能两次输入typedef
。 您必须从struct node
声明中取出typedef
并将其移动到头文件,或者将整个typedef
+结构声明移动到头文件中。 前一种解决方案通常是您想要的,因为它允许您隐藏一些信息。 所以,我的建议是在头文件中写这个:
typedef struct node *Node_ptr;
并将其保留在源文件中:
struct node {
char *key;
char *value;
struct node *next;
};
请注意,我创建了别名Node_ptr
,而不是Node
。 这是一个很好的做法,传达Node_ptr
是一个指针的想法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.