使用aerospike_query_foreach的回调函数给出构建错误

时间:2016-04-27 15:30:46

标签: c++ aerospike

我正在尝试为aerospike服务器创建一个c ++客户端。我可以使用列表插入数据。后来我想使用aerospike_query_foreach调用来检索数据。在这个调用中,我们需要发送一个回调函数。我试图发送一个名为processresult的回调函数,该函数在bool返回类型的同一个类中定义。但是,它给出了与库函数类型不匹配的错误。我写的代码是

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);
}

我的回叫功能是

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

编译错误

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

请指导我,如果我在这次电话会议中做错了什么?

1 个答案:

答案 0 :(得分: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)