如何使用Judy数组
How to use a Judy array
我对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*)’
请任何人帮我弄清楚我在做什么。。感谢
根据文档,_PValue
和JudyArray
参数颠倒。让你的电话看起来像这样:
JSLI( _PValue, JudyArray, (uint8_t *) String);
另外,尽量不要将其编译为C++代码。到目前为止,您的测试还没有使用C++功能。我打赌它会编译成C代码。JudyArray似乎依赖于这样一个事实,即C将在void *
和其他指针类型之间进行某些类型的隐式转换。
如果是这种情况,我不知道该怎么办。你收到的错误消息告诉我JSLI
是一个宏。为了修复这个答案的注释中的错误消息,你必须进入宏内部并添加一个类型转换。
这些类型的隐式转换在C中是允许的,因为否则使用malloc
总是需要难看的类型转换。C++故意不允许它们,因为new
的语义使得malloc
的结果被强制转换为正确类型的要求变得不重要。
由于这个原因,我认为这个库不能在C++中有效地使用。
似乎,您向JudySLIns(void**,const uint8_t*,J_UDY_ERROR_STRUCT*)传递了一个错误的参数,第一个参数,您最好检查一下!
对于整数键,在http://judyhash.sourceforge.net/
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组的地址分配给变量并删除
- 从C++本机插件更新Vector3数组
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 数组索引的值没有增加
- 将对象数组的引用传递给函数
- 为char数组调整zlib-zpipe
- 2D数组来自文本输入,中间有空格
- std::向量与传递值的动态数组
- 在c++中用vector填充一个简单的动态数组
- 使用strcpy将char数组的元素复制到另一个数组
- 使用指针从C++中的数组中获取最大值
- C++使用整数的压缩数组初始化对象
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '