Why do I keep getting this errors:
struct has no members [-Wpedantic]
‘struct cheque’ has no member named ‘refc’
‘struct cheque’ has no member named ‘valor’
etc. The code is as below
#ifndef _ITEM_
#define _ITEM_
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define key (a) (a != NULL ? a->refc : "")
#define less (a,b) (strcmp (a,b)<0)
#define eq(a,b) (strcmp (a,b) == 0)
#define NULLitem NULL
typedef long int* Key;
typedef struct cheque {
int valor
long int refe
long int refb
long int* refc
}*Item;
Item newItem (int valor, long int refe, long int refb, long int* refc);
void deleteItem (Item a);
void visitItem (Item a);
#endif
EDIT:
Now I'm facing folloeing errors,
Item.c:6:36: error: expected ‘;’, ‘,’ or ‘)’ before ‘refe’ Item newItem (int valor, long item refe, long item refb, long item* refc) ^ Item.c: In function ‘visitItem’:
Item.c:32:2: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long int’ [-Wformat=] printf("refe: %d\n", a->refe); ^
Item.c:33:2: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘long int’ [-Wformat=] printf("refb: %d\n", a->refb); The code is as below
item.h
#ifndef _ITEM_
#define _ITEM_
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define key (a) (a != NULL ? a->refc : "")
#define less (a,b) (strcmp (a,b)<0)
#define eq(a,b) (strcmp (a,b) == 0)
#define NULLitem NULL
typedef long int* Key;
typedef struct cheque {
int valor;
long int refe;
long int refb;
long int* refc;
}*Item;
Item newItem (int valor, long int refe, long int refb, long int* refc);
void deleteItem (Item a);
void visitItem (Item a);
#endif
item.c
#include "Item.h"
#include <stdio.h>
#include <stdlib.h>
Item newItem (int valor, long item refe, long item refb, long item* refc)
{
Item x = (Item) malloc (sizeof(struct cheque));
x->valor = valor;
x->refe = refe;
x->refb = refb;
x->refc = strdup(refc);
return x;
}
void deleteItem (Item a)
{
free(a->refc);
free(a);
}
void visitItem (Item a)
{
printf("valor: %d\n", a->valor);
printf("refe: %d\n", a->refe);
printf("refb: %d\n", a->refb);
printf("refc: %ld\n", a->refc);
}
EDIT_v2
Item newItem (int valor, long int refe, long int refb, long int* refc)
printf("valor: %d\n", a->valor);
printf("refe: %ld\n", a->refe);
printf("refb: %ld\n", a->refb);
printf("refc: %p\n", a->refc);
After correcting those mistakes I got the following errors:
Item.c: In function ‘newItem’: Item.c:14:2: warning: implicit declaration of function ‘strdup’ [-Wimplicit-function-declaration]
x->refc = strdup(refc); ^ Item.c:14:10: warning: assignment makes pointer from integer without a cast [enabled by default] x->refc = strdup(refc);
Item.c: In function ‘visitItem’: Item.c:34:2: warning: format ‘%p’ expects argument of type ‘void *’, but argument 2 has type ‘long int *’ [-Wformat=] printf("refc: %p\n", a->refc);
Edit_ v3
1 problem fixed Correction:
x->refc = refc;
Errors atm:
Item.c: In function ‘visitItem’: Item.c:34:2: warning: format ‘%p’ expects argument of type ‘void *’, but argument 2 has type ‘long int *’ [-Wformat=] printf("refc: %p\n", a->refc);