2013-04-24 12 views
7

Nie mogę uzyskać tej funkcji rekursywnej, aby poprawnie skompilować i nie jestem pewien dlaczego. Kod jest w następujący sposób:uwaga: poprzednia ukryta deklaracja "point_forward" była tutaj

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

Mój kompilator zwróci to:

mm.c: 134: 6: ostrzeżenie: konflikt typów dla '' [point_forward włączoną domyślnie]
mm. C: 96: 2: uwaga: poprzednia niejawna deklaracja 'point_forward' było tutaj

+2

proszę wkleić to, co masz w linii 96 –

+0

point_forward (m); – user2313514

+0

To jest jedyna inna instancja tej funkcji w moim kodzie. – user2313514

Odpowiedz

12

klucz jest w ten sposób:

poprzednie niejawna deklaracja z „point_forward” było tutaj

W linii 96 masz:

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

Ponieważ kompilator jeszcze nie widział deklarację funkcji dla point_forward(m), to „w sposób dorozumiany definiuje "(tj. zakłada) funkcję, która zwraca wartość int:

int point_forward(mem_ptr m); 

konflikty z definicją później:

void point_forward (mem_ptr m) { 

Aby rozwiązać ten problem, można:

  1. Put wyraźne oświadczenie gdzieś przed linią 96: void point_forward(mem_ptr m); To poinformować kompilator, jak traktować point_forward() kiedy widzi go na linii 96, mimo że nie widział jeszcze implementacji funkcji.

  2. Lub, zdefiniuj całą funkcję powyżej linii 96 (przenieś definicję funkcji z linii 134 do powyższej linii 96).

Tutaj jest trochę more about declaring functions.

Generalnie, za styl, chciałbym albo:

  • Jeśli nie chcesz używać point_forward() w innych plikach C, zdefiniować go w całości:

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

    na początek pliku źródłowego.

  • Jeśli chcesz użyć point_forward() w innych plikach C, umieścić do przodu deklarację:

    void point_forward(mem_ptr m); 
    

    w pliku nagłówka dla innych plików do uwzględnienia.

Powiązane problemy