【问题标题】:C - error: storage size of ‘a’ isn’t knownC - 错误:“a”的存储大小未知
【发布时间】:2012-02-06 14:21:29
【问题描述】:

这是我的 C 程序...

#include <stdio.h>

struct xyx {
    int x;
    int y;
    char c;
    char str[20];
    int arr[2];
};

int main(void)
{
    struct xyz a;
    a.x = 100;
    printf("%d\n", a.x);
    return 0;
}

这是我得到的错误......

按 ENTER 或输入命令继续

13structtest.c:在函数“main”中: 13structtest.c:13:13:错误:“a”的存储大小未知 13structtest.c:13:13:警告:未使用的变量“a”[-Wunused-variable]

【问题讨论】:

  • 我更喜欢 MSVC,而不是 GCC 给出的相当神秘的错误:error C2079: 'a' uses undefined struct 'xyz'
  • 感觉自己像个白痴!谢谢:)
  • 我建议将其标记为gcc,因为这是编译器特定的问题

标签: c gcc struct


【解决方案1】:

您的结构称为struct xyx,但a 的类型为struct xyz。 Once you fix that, the output is 100.

#include <stdio.h>

struct xyx {
    int x;
    int y;
    char c;
    char str[20];
    int arr[2];
};

int main(void)
{
    struct xyx a;
    a.x = 100;
    printf("%d\n", a.x);
    return 0;
}

【讨论】:

    【解决方案2】:

    这样说:struct xyx a;

    【讨论】:

      【解决方案3】:

      您将结构定义为xyx,但是在您的主结构中,您使用struct xyz a; ,它只会创建一个不同名称结构的前向声明。

      尝试使用xyx a; 代替该行。

      【讨论】:

      • 前向声明创建失败;使用struct xyz *pa; 会成功,但实际上它会失败,因为a(又名struct xyz)的大小未知。
      【解决方案4】:

      您将结构定义为 xyx,但您正在尝试创建名为 xyz 的结构。

      【讨论】:

        【解决方案5】:

        正确的错字

        struct xyz a;
        

        到

        struct xyx a;
        

        你可以试试typedef,方便b

        【讨论】:

          【解决方案6】:

          对于遇到此问题的任何人,这是一个拼写错误。检查你的 struct delcerations 和你的 struct 的拼写

          【讨论】:

            【解决方案7】:

            在这种情况下,用户在定义和用法上犯了错误。 如果有人对结构进行了typedef,则应使用相同的结构而不使用struct,以下是示例。

            typedef struct
            {
               int a;
            }studyT;
            

            在函数中使用时

            int main()
            {
               struct studyT study; // This will give above error.
               studyT stud; // This will eliminate the above error.
               return 0;
            }
            

            【讨论】:

              【解决方案8】:
              1. 在 main 函数之前声明结构。
              2. 修复该变量名的拼写错误(如果有)

              【讨论】:

                【解决方案9】:

                我通过更正代码中的一个简单错误解决了我的问题。 list_t new_end_code 声明带来了错误。 应该是,

                list_t *new_end_code
                

                【讨论】:

                  猜你喜欢
                  • 2017-07-28
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-07-24
                  • 1970-01-01
                  • 1970-01-01
                  • 2022-07-08
                  相关资源
                  最近更新 更多