Dies ist der Entladefunktionscode.Wie debugge "undefinierte Referenz" in meiner C entladen Funktion?
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;
}
Dies ist die Antwort, die ich erhalte, wenn ich kompiliere.
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
Und wo ist 'release_nodes' definiert? In welcher Quelldatei? Bauen Sie mit dieser Datei? –
Auch das Deklarieren einer Funktion in einer anderen Funktion ist wahrscheinlich nicht das, was Sie wollen (obwohl das nicht falsch ist). Sie sollten die Deklaration lieber in eine Header-Datei verschieben. – ForceBru
Es sieht so aus, als ob dies die Definition der Funktion 'release_nodes()' ist. 'unload()' sollte eine separate Funktion sein, die 'release_nodes()' mit dem Wurzelknoten als Argument aufruft. – Barmar