我有一个包含如下结构的头文件:
typedef struct
{
int index = -1;
stack_node *head;
} stack;
但是当使用cc进行编译时,它会在分配行(int index = -1
)显示错误:
error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘=’ token
我应该添加一个初始化函数来初始化变量吗?
答案 0 :(得分:6)
您提供的不是变量声明,而是类型定义。您不能将默认值分配给typedef中的struct字段。
如果要为结构变量分配初始值,则应尝试:
stack myStack = { .index = 1 };
这适用于C99。
答案 1 :(得分:4)
typedef struct
{
int index;
stack_node *head;
} stack;
stack getStack()
{
stack st;
st.index = -1;
return st;
}
答案 2 :(得分:1)
在C中,您无法在结构内部分配变量。
但是,在创建每个实例时,您应该在另一个函数中初始化它们。
答案 3 :(得分:1)
你不能在结构声明中指定一个值。
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回答,我不知道你可以通过前缀初始化个别成员变量。在前。学到了一些东西。感谢。