2010-03-23 41 views
5

Tôi đã bỏ bộ não của mình vào lúc này, tôi chỉ đơn giản là cố tạo một phương thức trả về cấu trúc như tôi muốn trả về hai int.Khai báo kiểu nguyên mẫu "struct" - C

nguyên mẫu của tôi cho phương pháp này là như sau:

typedef struct RollDice(); 

Ngoài ra phương pháp riêng của mình:

typedef struct RollDice() 
{ 
diceData diceRoll; 

diceRoll.dice1 = 0; 
diceRoll.dice2 = 0; 

return diceRoll; 
} 

Trình biên dịch hiển thị lỗi: "Syntax error: ')'" cho cả nguyên mẫu và phương pháp thực tế.

Các struct bản thân:

typedef struct 
{ 
int dice1; 
int dice2; 
}diceData; 

Có rõ ràng nơi tôi sẽ sai? Tôi đã thử mọi thứ tôi có thể nghĩ đến.

Cảm ơn

Edit/Giải pháp:

Để có được chương trình làm việc với các giải pháp đề nghị tôi bị buộc phải thay đổi sau đây để các cấu trúc,

typedef struct diceData 
    { 
    int dice1; 
    int dice2; 
    }; 

Trả lời

9

Bạn sẽ muốn typedef struct ... diceData xảy ra trước chức năng của bạn, và sau đó chữ ký của hàm sẽ là diceData RollDice().

typedef <ORIGTYPE> <NEWALIAS> có nghĩa là bất cứ khi nào <NEWALIAS> xảy ra, coi nó như thể nó có nghĩa là <ORIGTYPE>. Vì vậy, trong trường hợp của những gì bạn đã viết, bạn đang nói với trình biên dịch rằng struct RollDice là kiểu gốc (và tất nhiên, không có cấu trúc nào được xác định); và sau đó nó thấy () nơi nó đang mong đợi một bí danh mới.

+0

Bạn được chào đón. –

6

Đây chỉ là một phiên bản cụ thể của câu trả lời Đánh dấu Rushakoff của:

typedef struct 
{ 
    int dice1; 
    int dice2; 
} diceData; 

diceData RollDice() 
{ 
    diceData diceRoll; 

    diceRoll.dice1 = 0; 
    diceRoll.dice2 = 0; 

    return diceRoll; 
} 
+0

Cảm ơn bạn đã làm rõ –

1

Vấn đề là bạn đã không được đưa ra phương pháp này một kiểu trả về. Dường như bạn nên trở về một loại dicedata nên chữ ký mẫu sẽ trông như thế

struct dicedata RollDice(); 

Và phương pháp

struct dicedata RollDice() 
{ 
    diceData diceRoll; 

    diceRoll.dice1 = 0; 
    diceRoll.dice2 = 0; 

    return diceRoll; 
} 
3

Bạn không thể sử dụng typedef để định nghĩa một hàm.

typedef struct của bạn đầu tiên như

typedef struct 
{ 
    int dice1; 
    int dice2; 
} diceData; 

Sau đó tuyên bố chức năng của bạn như

diceData RollDice() 
{ 
    diceData diceRoll; 

    diceRoll.dice1 = 0; 
    diceRoll.dice2 = 0; 

    return diceRoll; 
} 

Đó tuyên bố RollDice như một hàm trả về một struct diceData.

Một cách khác để đối phó với việc cố gắng trả về hai giá trị sẽ là sử dụng các tham số.

Trong trường hợp đó, hàm của bạn sẽ trả về boolean (để biểu thị thành công hay thất bại) và lấy hai con trỏ tới số nguyên làm tham số. Trong hàm bạn muốn điền nội dung của các con trỏ, như sau:

bool_t rollDice(int *pDice1, int *pDice2) 
{ 
    if (pDice1 && pDice2) 
    { 
     *pDice1 = 0; 
     *pDice2 = 0; 
     return TRUE; 
    } 
    else 
    { 
     return FALSE; 
    } 
} 

int main(int argc, char **argv) 
{ 
    int a, b; 
    rollDice(&a, &b); 

    return 0; 
} 
+0

Cảm ơn bạn đã trả lời chi tiết –

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