0

sqlite3 を使用してプログラム用に C で単語リスト サーチャーを作成していますが、これらのエラーが発生しました。
知っていることは何でも試しましたが、修正されませんでした。問題は私の結合機能にあると思いますが、よくわかりません。

コード:

bool *gb_wordlist_add_to_list (gbwordlist *word_list,char *str)
{
int sql_error;
char *error_massage;
if (gb_wordlist_in_list (word_list,str))
    {
    sql_error = sqlite3_execute(word_list->database, gb_wordlist_join(ADD_TO_TABLE_COMMAND"\'",str,"\';"),
                                NULL ,NULL, &error_massage);    
    if( sql_error!=SQLITE_OK )
    {
        fprintf(stderr, "SQL error: %s\n", error_massage);
        sqlite3_free(error_massage);
        return 0;
    }

    }
else
    return 0;

}


char *gb_wordlist_join (char *s1,char *s2,char *s3){
char *s;
s = malloc(strlen(s1) + strlen(s2) + strlen(s3) + 1);
if(s)
{
    strcpy(s,s1);
    strcat(s,s2);
    strcat(s,s3);
}
return s;
}

エラー:

gb-sql.o: In function `gb_wordlist_remove_from_list':
/home/reza/Project/GB/Search algorithm/Source/gb-search/src/gb-sql.c:104: undefined reference to `sqlite3_execute'

また、私の完全なコードはこちらです。どうもありがとう!

4

1 に答える 1

1

未定義の参照を取得している理由はsqlite3_execute、ライブラリの一部としてそのような関数がないためです。おそらく使用するsqlite3_execつもりでした(コードの一部で使用されているもの)。
補足:

  1. 関数gb_wordlist_callbackは戻りintますが、 return と宣言されていint*ます。intに渡されると予想されるパラメーターと一致するように、戻り値の型をに変更する必要がありますsqlite3_exec(から変更した後sqlite3_execute)
  2. sqlite3_exec(から変更した後) に渡される 4 番目のパラメーターは、次のようsqlite3_executeになると予想されます。void*existance&existance
  3. 宣言された戻り値の型と関数から返される実際の戻り値の型が一致しない関数がかなりあります。
  4. コンパイラ オプションを使用してコードをコンパイルし、-Wall -Wextraすべての警告を修正します。それは良い習慣です。

お役に立てれば!

于 2012-05-17T17:58:24.293 に答える