C语言 未定义结构标识符,即使已定义

hgqdbh6s  于 2022-12-03  发布在  其他
关注(0)|答案(2)|浏览(218)

我有一个学校项目,我必须在一个.h头文件中制作我的结构和函数。
我已经创建了我的结构,但不能使用其中的任何变量,因为每当我调用它时,它会突出显示结构名称,并告诉我它没有定义,即使它显然在我的结构中,也不会突出显示或给予我任何语法错误。

#include <stdio.h>

typedef struct test1 {
    int array1[3];
    int array2[3];
};

int main(void) {
    scanf_s(" %d %d", &test1.array1[1], &test1.array2[1]);

}

我试过使用typedef,有和没有,它的结果是一样的。如果我在结构外创建单独的变量,我不会遇到任何问题,所以我相信这是我如何创建我的结构的一些问题,但我不知道问题是什么。

j5fpnvbx

j5fpnvbx1#

typedef的使用让我想到您实际上想要定义一个名为test1的类型。将名称移至struct之后:

#include <stdio.h>

typedef struct {
    int array1[3];
    int array2[3];
} test1;            // now a name you can use

然后,您需要创建test1的一个示例,以便能够将其与scanf_s一起使用:

int main(void) {
    test1 t1;      // `t1` is now a `test1` instance

    scanf_s(" %d %d", &t1.array1[1], &t1.array2[1]);
//                     ^^             ^^
}
p8h8hvxi

p8h8hvxi2#

您声明了类型说明符struct test1(而且typedef声明甚至没有为类型说明符struct test1声明typedef名称)

typedef struct test1 {
    int array1[3];
    int array2[3];
};

但是scanf_s的调用

scanf_s(" %d %d", &test1.array1[1], &test1.array2[1]);

预期对象。test1不是对象。这个名称什至未宣告。
你可以这样写

struct test1 test1;
scanf_s(" %d %d", &test1.array1[1], &test1.array2[1]);

相关问题