在非结构或联合中请求成员“某物”

时间:2018-12-30 13:39:35

标签: 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++;
    }`    

什么会导致错误“在结构或联合体中请求成员'blablabla'”?

1 个答案:

答案 0 :(得分:0)

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

特别是在这种情况下,您的typedef关键字没有任何作用,因为您没有声明要应用的标识符。也许您有一个相对普遍的误解,认为typedef用于定义新类型,尤其是结构类型。它不是。它用于为类型定义别名。您拥有声明的类型为struct entregastruct关键字是类型名称的一部分),您可以在任何地方使用它。如果您希望能够省略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的顺序和结构定义也可能是有益的。