2015-05-11 46 views
-4

为什么我不断收到此错误:'结构......' 没有名为成员

struct has no members [-Wpedantic]
‘struct cheque’ has no member named ‘refc’
‘struct cheque’ has no member named ‘valor’

等的代码如下


#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: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); 

纠正这些错误后,我得到了以下错误:

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问题固定 更正:

x->refc = refc; 

错误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);

+0

基本上是错别字:你错过了很多';'。也考虑用功能替换你的宏,因为后者更容易调试。 – Bathsheba

回答

1

你忘了semico LONS:

typedef struct cheque {     
    int valor; 
    long int refe; 
    long int refb; 
    long int* refc;  

}*Item;       
1

我想,你的代码应该看起来像

typedef struct cheque {     
    int valor; 
    long int refe; 
    long int refb; 
    long int* refc; 

}*Item; 

;秒。


编辑:

我认为,这是另一个错字。

Item newItem (int valor, long item refe, long item refb, long item* refc) 

应该读

Item newItem (int valor, long int refe, long int refb, long int* refc) 

然后,

printf("refe: %d\n", a->refe); 
printf("refb: %d\n", a->refb); 
printf("refc: %ld\n", a->refc); 

由具有错误格式说明继而调用undefined behaviour

long int的正确格式说明符是%ld,而long int *的格式说明符是%p

此外,请do not cast返回值malloc()和家庭在C

+0

该死的,你是对的,这样的菜鸟错误 – Miguel

+0

@Miguel没关系,发生。 :-) –

+0

谢谢:) 你能帮助我与我的新erros:/?我是新来的指针,结构和FIFO的东西在C .. – Miguel

相关问题