我有一个头文件,包括这样的结构:
typedef struct
{
int index = -1;
stack_node *head;
} stack;
但是当使用 cc 编译时,它在赋值行 ( int index = -1
) 处显示错误:
error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘=’ token
我应该添加一个初始化函数来初始化变量吗?
我有一个头文件,包括这样的结构:
typedef struct
{
int index = -1;
stack_node *head;
} stack;
但是当使用 cc 编译时,它在赋值行 ( int index = -1
) 处显示错误:
error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘=’ token
我应该添加一个初始化函数来初始化变量吗?
您提供的不是变量声明,而是类型定义。您不能为 typedef 中的结构字段分配默认值。
如果要为结构变量分配初始值,则应尝试:
stack myStack = { .index = 1 };
这适用于 C99。
typedef struct
{
int index;
stack_node *head;
} stack;
stack getStack()
{
stack st;
st.index = -1;
return st;
}
在 C 中,您不能在结构内分配变量。
但是,您应该在创建每个实例时在另一个函数中初始化它们。
你不能像这样在结构声明中赋值。
stack s = { -1, 0 };
试试这个。
从技术上讲,如果您使用 C++,您可以为 struct 定义构造函数。我认为这不适用于 C。如果您严格处于 C 环境中,请使用上述方法。
typedef struct _stack
{
int index = -1;
stack_node *head;
_stack() {
index = -1;
head = 0;
}
} stack;
像这样的东西。让我知道它是否不起作用,因为我基于一些内存编写并且很长一段时间没有编写太多 C。
更新:我喜欢@mouviciel 的回答,我不知道您可以通过添加前缀来初始化单个成员变量。在前。学到了一些东西。谢谢。