2017-02-20 19 views
-1

Это код функции разгрузки.Как отлаживать «неопределенную ссылку» в моей функции выгрузки C?

bool unload(void) 
{ 
    void release_nodes (node* node_to_free); 

    //looking for children node to free 
    for (int i = 0; i < 27; i++) 
    { 
     if (node_to_free -> children[i]) 
     { 
      release_nodes (node_to_free -> children[i]); 
     } 
    } 

    free (node_to_free); 

    return false; 
} 

Это ответ, который я получаю при компиляции.

clang -ggdb3 -O0 -Qunused-arguments -std=c11 -Wall -Werror -c -o speller.o speller.c 
clang -ggdb3 -O0 -Qunused-arguments -std=c11 -Wall -Werror -c -o dictionary.o dictionary.c 
clang -ggdb3 -O0 -Qunused-arguments -std=c11 -Wall -Werror -o speller speller.o dictionary.o 
dictionary.o: In function `unload': 
/home/ubuntu/workspace/pset5/speller/dictionary.c:170: undefined reference to `release_nodes' 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
make: *** [speller] Error 1 
+6

И где определено 'release_nodes'? В каком исходном файле? Вы строите с этим файлом? –

+1

Кроме того, объявление функции внутри другой функции, вероятно, не является тем, что вы хотите (хотя это неверно). Лучше переместить объявление в некоторый заголовочный файл. – ForceBru

+0

Похоже, что это должно быть определение функции 'release_nodes()'. 'unload()' должна быть отдельной функцией, которая вызывает 'release_nodes()' с корневым узлом в качестве аргумента. – Barmar

ответ

2

Вы должны определить функцию release_nodes(), не декларируя ее.

void release_nodes (node* node_to_free) { 
    //looking for children node to free 
    for (int i = 0; i < 27; i++) 
    { 
     if (node_to_free -> children[i]) 
     { 
      release_nodes (node_to_free -> children[i]); 
     } 
    } 

    free (node_to_free); 
} 

Затем вы вызываете эту функцию из unload():

bool unload(void) { 
    if (root_node) { 
     release_nodes(root_node); 
     root_node = NULL; 
    } 
    return false; 
} 

Заменить root_node с именем глобальной переменной, которая содержит корень дерева.

+0

Чтобы быть справедливым, функция разгрузки OP была bool .... – polarysekt

+0

Справа, их запутали. Хотя почему он всегда возвращал «ложь», это тайна. – Barmar

+0

Спасибо вам всем. Проблема была решена. – doublestanding