2016-04-27 8 views
1

私はaerospikeサーバー用のC++クライアントを作成しようとしています。リストを使用してデータを挿入できます。後で私はaerospike_query_foreach呼び出しを使用してデータを取得したい。この呼び出しでは、1つのコールバック関数を送信する必要があります。私はboolの戻り値の型と同じクラスで定義されたprocessresultというコールバック関数を送信しようとしました。しかし、ライブラリ関数の型不一致のようなエラーを出します。私が書いたコードはaerospike_query_foreachでビルドエラーを返すコールバック関数

as_query query; 
as_error error; 
as_query_init(&query, pConfigInfo->inputNsName.c_str(), (*itr).c_str()); 
as_query_where_inita(&query, 1); 
as_query_where(&query, "rawData", as_integer_range(startinterval,stopinterval)); 
//Execute the query for database specified. 
if (aerospike_query_foreach(&m_asConnection, &error, NULL, &query, CDataBaseManager::ProcessResults, NULL) != AEROSPIKE_OK) 
{ 
    fprintf(stderr, "aerospike_query_foreach() returned %d - %s", err.code, err.message); 
    as_query_destroy(&query); 
} 

私のコールバック関数は、私はこの呼び出しで何も悪いことをやっている場合は、私を導いてください

database_manager.cpp:126:112: error: cannot convert âCDataBaseManager::ProcessResultsâ from type âbool (CDataBaseManager::)(const as_val*, void*) {aka bool (CDataBaseManager::)(const as_val_s*, void*)}â to type âaerospike_query_foreach_callback {aka bool (*)(const as_val_s*, void*)}â 
    if (aerospike_query_foreach(&m_asConnection, &error, NULL, &query, CDataBaseManager::ProcessResults, NULL) != AEROSPIKE_OK) 
                               ^
make: *** [database_manager.o] Error 1 

bool CDataBaseManager::ProcessResults(const as_val* p_val, void* udata) 
{ 
    if (! p_val) 
    { 
     fprintf(stderr, "query callback returned null - query is complete."); 
     return true; 
    } 
} 

コンパイルエラーがでているのですか?

答えて

1

「aerospike_query_foreach_callback」としてメソッドを使用しないでください。
名前空間に属していない関数を使用します。例えば
のために、機能を変更します。

bool ProcessResults(const as_val* p_val, void* udata) 
{ 
    if (! p_val) 
    { 
     fprintf(stderr, "query callback returned null - query is complete."); 
     return true; 
    } 
} 

として、それを呼び出します。

aerospike_query_foreach(&m_asConnection, &error, NULL, &query, ProcessResults, NULL) 
+1

はい、私は、foreachループで呼び出すための静的関数としてそれを作りました。レスポンスありがとう。 – VNS

関連する問題