c - 请求非结构或 union 中的成员 'something'

标签 c

大家好,我的同事和我必须用 C 语言编写一个程序来排序模拟维修商店中的票证系统。

我这样做就像基本上每种类型的票证都有一个结构。

这是一个例子。

typedef struct reparacao
typedef struct  entrega
{
char servico_ent;
int numtick_ent;
int dia_entrada_ent;
int mes_entrada_ent;
int ano_entrada_ent;
int hora_entrada_ent;
int min_entrada_ent;
int hora_atend_ent;
int min_atend_ent;  
int balcao_ent;
char cond_ent[100];
float valor_pagar;
};
entrega entrega1[100];

然后我写信来争取时间

`time_t t = time(NULL);
struct tm tm = *localtime(&t);
printf("%d-%d-%d %d:%d\n", tm.tm_mday, tm.tm_mon + 1, tm.tm_year + 1900, tm.tm_hour, tm.tm_min);
// verificar se o horário está entre as 8H e as 22H
if(tm.tm_hour<8 || tm.tm_hour>=22) 
{
    printf("\nNao pode recolher ticket. Horario: 8:00h-21:59h\n\n");
}else
    {
    //Guardar dados no vetor
        printf("Ticket numero %d\n\n", natend_ent);
        entrega1[j].numtick_ent = natend_ent;
        entrega1[j].servico_ent = 'Entrega';
        entrega1[j].dia_entrada_ent = tm.tm_mday;
        entrega1[j].mes_entrada_ent = tm.tm_mon+1;
        entrega1[j].ano_entrada_ent = tm.tm_year + 1900;
        entrega1[j].hora_entrada_ent = tm.tm_hour;
        entrega1[j].min_entrada_ent = tm.tm_min;
        natend_ent++;
        j++;
    }`    

什么可能导致错误“请求非结构或 union 中的成员‘blablabla’”?

最佳答案

您已将 entrega1 声明为一个数组,其元素为 entrega 类型,但所提供的代码未定义 entrega 类型,并且在特别是,该标识符未定义为表示结构类型。你的编译器也应该提示这一点。通常最好从顶部开始处理警告和错误,因为一处错误代码导致多个错误的情况并不罕见。

具体来说,在这种情况下,您的 typedef 关键字不会执行任何操作,因为您没有声明要应用它们的任何标识符。也许您有一个相对常见的误解:typedef 用于定义新类型,尤其是结构类型。它不是。它用于定义类型的别名。您声明的类型是 struct entrega(struct 关键字是类型名称的一部分),您可以在任何地方使用它。如果您希望能够省略 struct 部分,那么为该世界使用 typedef 的正确方法是:

typedef struct entrega {
    char servico_ent;
    /* ... other members ... */
    float valor_pagar;
} entrega;

同样,您可以将 typedef 与结构定义分开:

struct entrega {
    char servico_ent;
    /* ... other members ... */
    float valor_pagar;
};

typedef struct entrega entrega;

后者也许比前者更有启发性。允许您交换 typedef 和结构定义的顺序也可能具有启发性。

关于c - 请求非结构或 union 中的成员 'something',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53978085/

相关文章:

html - 返回html代码

java - 将C代码转换为Java(分而治之的delaunay三角剖分算法)

c - 使用 realloc 调整缓冲区大小

c - "cannot find -lcrypto -lssl"在 Windows 上使用 OpenSSL 并使用 MinGW

c - 使用低级 API 注册 dbus 对象和接口(interface)

C程序导致内存泄漏?

c++ - 在linux上每10ms定期执行一个函数

c - 发送数组以按顺序排名

sql - 使用 PostgreSQL libpqtypes PQputf 或 PQexecf 函数将 SQL null 作为 SQL 语句参数值传递

c - 在C中获取 float 的指数