【问题标题】:Can't assign struct variable in header file无法在头文件中分配结构变量
【发布时间】:2011-08-02 21:06:42
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c struct header-files cc


    【解决方案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 的回答,我不知道您可以通过添加前缀来初始化单个成员变量。在前。学到了一些东西。谢谢。

    【讨论】:

      【解决方案2】:

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

      如果你想给一个结构体变量赋初值,你应该试试:

      stack myStack = { .index = 1 };
      

      这适用于 C99。

      【讨论】:

        【解决方案3】:
        typedef struct
        {
            int index;
            stack_node *head;
        } stack;
        
        stack getStack()
        {
            stack st;
            st.index = -1;
            return st;
        }
        

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2018-03-29
            • 2018-12-29
            • 2014-08-20
            • 2011-09-25
            • 1970-01-01
            • 2021-07-06
            • 2014-06-04
            • 2013-03-15
            相关资源
            最近更新 更多