これはアンロード機能コードです。私の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
「release_nodes」はどこに定義されていますか?どのソースファイルですか?あなたはそのファイルでビルドしますか? –
また、別の関数の中で関数を宣言することは、おそらくあなたが望むものではありません(間違っているわけではありませんが)。いくつかのヘッダーファイルで宣言を移動する方がよいでしょう。 – ForceBru
これは 'release_nodes()'関数の定義であると思われます。 'unload()'はルートノードを引数として 'release_nodes()'を呼び出す別の関数でなければなりません。 – Barmar