如何使用Judy数组

时间:2011-06-21 04:47:34

标签: c++ data-structures

我对Judy Arrays感兴趣并尝试使用它。但我无法使用它做任何有用的事情。每次它给我施法错误..示例c ++代码和下面给出的错误。

#include "Judy.h"
#include <iostream>

using namespace std;

int main()
{
    int      Rc_int;                           // return code - integer
    Word_t   Rc_word;                          // return code - unsigned word
    Word_t   Index = 12, Index1 = 34, Index2 = 55, Nth;
    Word_t  PValue;                            // pointer to return value
    //Pvoid_t PJLArray = NULL;                 // initialize JudyL array


    Pvoid_t JudyArray = NULL;
    char      String[100];

    PWord_t _PValue;
    JSLI( JudyArray, _PValue, (uint8_t *) String);  

    return(0);

} // main()

这给了我错误

m.cpp: In function ‘int main()’:
m.cpp:19: error: invalid conversion from ‘long unsigned int**’ to ‘void**’
m.cpp:19: error:   initializing argument 1 of ‘void** JudySLIns(void**, const uint8_t*, J_UDY_ERROR_STRUCT*)’

请有人帮我弄清楚我在做什么错误.. 感谢

3 个答案:

答案 0 :(得分:5)

根据the documentation,您可以撤消_PValueJudyArray个参数。让你的通话看起来像这样:

JSLI( _PValue, JudyArray, (uint8_t *) String);  

另外,请不要将其编译为C ++代码。到目前为止,您的测试不使用C ++功能。我打赌它会编译为C代码。看起来JudyArray依赖于C将在void *和其他指针类型之间进行某些类型的隐式转换这一事实。

如果是这种情况,我不知道该怎么做。您收到的错误消息告诉我JSLI是一个宏。为了修复您在此答案的评论中的错误消息,您必须进入宏并添加类型转换。

在C中允许这种隐式转换,因为否则使用malloc总是需要丑陋的转换。 C ++故意不允许它们,因为new的语义要求将malloc的结果强制转换为不重要的正确类型。

由于这个原因,我不认为这个库可以在C ++中有效使用。

答案 1 :(得分:0)

看来,你传递了JudySLIns(void **,const uint8_t *,J_UDY_ERROR_STRUCT *)一个错误的参数,第一个,你最好检查一下!

答案 2 :(得分:0)

对于整数键,http://judyhash.sourceforge.net/

处有一个C ++包装器