3

我有一个头文件,包括这样的结构:

typedef struct
{
    int index = -1;
    stack_node *head;
} stack;

但是当使用 cc 编译时,它在赋值行 ( int index = -1) 处显示错误:

error: expected ‘:’, ‘,’, ‘;’, ‘}’ or ‘__attribute__’ before ‘=’ token

我应该添加一个初始化函数来初始化变量吗?

4

4 回答 4

5

您提供的不是变量声明,而是类型定义。您不能为 typedef 中的结构字段分配默认值。

如果要为结构变量分配初始值,则应尝试:

stack myStack = { .index = 1 };

这适用于 C99。

于 2011-04-11T08:26:07.370 回答
4
typedef struct
{
    int index;
    stack_node *head;
} stack;

stack getStack()
{
    stack st;
    st.index = -1;
    return st;
}
于 2011-04-11T08:24:06.727 回答
1

在 C 中,您不能在结构内分配变量。

但是,您应该在创建每个实例时在另一个函数中初始化它们。

于 2011-04-11T08:23:51.723 回答
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 的回答,我不知道您可以通过添加前缀来初始化单个成员变量。在前。学到了一些东西。谢谢。

于 2011-04-11T08:32:52.090 回答