2012-03-05 36 views
10

Tôi đang gặp sự cố nhỏ khi cố gắng tạo cấu trúc này. Đây là mã cho cấu trúc:Lỗi: Chuyển đổi sang loại vô hướng được yêu cầu

typedef struct stats {     
    int strength;    
    int wisdom;     
    int agility;     
} stats; 

typedef struct inventory { 
    int n_items; 
    char **wepons; 
    char **armor; 
    char **potions; 
    char **special; 
} inventory; 

typedef struct rooms { 
    int n_monsters; 
    int visited; 
    struct rooms *nentry; 
    struct rooms *sentry; 
    struct rooms *wentry; 
    struct rooms *eentry; 
    struct monster *monsters; 
} rooms; 

typedef struct monster { 
    int difficulty; 
    char *name; 
    char *type; 
    int hp; 
} monster; 

typedef struct dungeon { 
    char *name; 
    int n_rooms; 
    rooms *rm; 
} dungeon; 

typedef struct player { 
    int maxhealth; 
    int curhealth; 
    int mana; 
    char *class; 
    char *condition; 
    stats stats; 
    rooms c_room; 
} player; 

typedef struct game_structure { 
    player p1; 
    dungeon d; 
} game_structure; 

Và đây là đoạn code tôi đang gặp một vấn đề với:

dungeon d1 = (dungeon) malloc(sizeof(dungeon)); 

Nó mang lại cho tôi những lỗi "error: chuyển đổi sang loại không vô hướng yêu cầu " Ai đó có thể giúp tôi hiểu tại sao điều này không?

Trả lời

12

Bạn không thể truyền bất kỳ thứ gì vào loại cấu trúc. Những gì tôi cho là bạn muốn viết là:

dungeon *d1 = (dungeon *)malloc(sizeof(dungeon)); 

Nhưng vui lòng không bỏ giá trị trả lại của malloc() vào chương trình C.

dungeon *d1 = malloc(sizeof(dungeon)); 

Sẽ hoạt động tốt và không ẩn #include lỗi của bạn.

+2

vấn đề là gì nếu bạn truyền giá trị trả lại của malloc()? –

+0

@PriteshAcharya, có lẽ không nhiều với các trình biên dịch hiện đại. Điều đó nói rằng, nó không thành ngữ. Đọc [câu hỏi này và câu trả lời của nó] (http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc) cho nhiều cuộc thảo luận chi tiết. –

+0

'struct student_simple { \t int rollno; \t char * name; }; ' Sự khác nhau giữa 'struct student_simple * s2 = malloc (sizeof (struct student_simple *)); struct student_simple * s3 = malloc (sizeof (struct student_simple)); ' Tôi có thể sử dụng cả s2 và s3 mà không gặp vấn đề gì nhưng khi kiểm tra kích thước trong gdb gdb $ 'p sizeof (struct student_simple)' cho 16 gdb $ 'p sizeof (struct student_simple *)' cung cấp cho 8 cách một khối 8 byte lưu trữ cấu trúc student_simple.? –

0

Bộ nhớ bởi malloc giao phải được lưu trữ trong một con trỏ đến một đối tượng, không phải trong đối tượng riêng của mình:

dungeon *d1 = malloc(sizeof(dungeon)); 
2

malloc trả về một con trỏ, vì vậy có lẽ là những gì bạn muốn là như sau:

dungeon* d1 = malloc(sizeof(dungeon)); 

đây là những gì trông giống như malloc:

void *malloc(size_t size); 

Như bạn có thể thấy nó trả lại void*, tuy nhiên bạn shouldn't cast the return value.

Các vấn đề liên quan