2013-04-24 25 views
7

Tôi dường như không thể nhận hàm đệ quy này để biên dịch đúng cách và tôi không chắc chắn lý do. Mã này là như sau:lưu ý: tuyên bố tiềm ẩn trước đây của ‘point_forward’ đã ở đây

void point_forward (mem_ptr m) { 
    mem_ptr temp; 
    temp = m->next; 
    if (temp->next != NULL) point_forward(temp); 
    m->next = temp->next; 
} 

trình biên dịch của tôi trở lại này:

mm.c: 134: 6: cảnh báo: mâu thuẫn loại cho 'point_forward' [kích hoạt theo mặc định]
mm. c: 96: 2: lưu ý: khai ngầm trước của 'point_forward' đã ở đây

+2

hãy dán những gì bạn có trong dòng 96 –

+0

point_forward (m); – user2313514

+0

Đó là trường hợp duy nhất của hàm này trong mã của tôi. – user2313514

Trả lời

12

Điều quan trọng là trong này:

trước ngầm khai của 'point_forward' đã ở đây

On line 96 bạn có:

point_forward(m); // where m is a mem_ptr; 

Kể từ khi trình biên dịch vẫn chưa nhìn thấy một khai báo hàm cho point_forward(m), nó "ngầm định nghĩa "(nghĩa là, giả định) một hàm trả về một int:

int point_forward(mem_ptr m); 

Điều này mâu thuẫn với định nghĩa sau:

void point_forward (mem_ptr m) { 

Để sửa lỗi này, bạn có thể:

  1. Đặt một tuyên bố rõ ràng ở đâu đó trước dòng 96: void point_forward(mem_ptr m); này sẽ cho trình biên dịch như thế nào để điều trị point_forward() khi nó nhìn thấy nó trên dòng 96, mặc dù nó chưa thấy chức năng thực hiện.

  2. Hoặc, xác định toàn bộ hàm trên dòng 96 (di chuyển định nghĩa hàm từ dòng 134 trở đi lên trên dòng 96).

Đây là một chút more about declaring functions.

Nói chung, đối với phong cách, tôi sẽ hoặc là:

  • Nếu bạn không muốn sử dụng point_forward() trong bất kỳ tập tin C khác, định nghĩa nó đầy đủ:

    static void point_forward(mem_ptr m) { ..function body goes here.. }

    tại đầu tệp nguồn.

  • Nếu bạn muốn sử dụng point_forward() trong các tập tin C khác, đưa ra tuyên bố về phía trước:

    void point_forward(mem_ptr m); 
    

    trong một tập tin tiêu đề cho các tập tin khác bao gồm.

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