无法在头文件中分配struct变量

时间:2011-04-11 08:19:39

标签: c struct header-files cc

我有一个包含如下结构的头文件:

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

但是当使用cc进行编译时,它会在分配行(int index = -1)显示错误:

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

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

4 个答案:

答案 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回答,我不知道你可以通过前缀初始化个别成员变量。在前。学到了一些东西。感谢。