错误:动态打开多个共享库时,'void *'不是指向对象类型的错误

时间:2012-01-22 06:15:10

标签: c++ pointers dynamic casting shared-libraries

我需要在运行时打开多个共享库。我不知道他们的号码(计数),所以我使用动态内存分配:

void* handle= new void* [n]; // n refers to number of handles
handle[0] = dlopen("./fileN.so", RTLD_LAZY); // doesn't work : Error: ‘void*’ is not a pointer-to-object type

但是,如果我进行静态分配,它会起作用 -

void* handle[10];
handle[0] = dlopen("./file0.so", RTLD_LAZY); // works

为什么当我动态访问句柄时,我收到错误?以及如何解决?

2 个答案:

答案 0 :(得分:4)

您需要额外的间接级别。指向指针的指针:

void** handle= new void* [n];
     ^

您的代码在其他类型上无效:

int* handle= new int* [n]; // error assigning int** to int*

但它适用于void*,因为void*可以指向void**

答案 1 :(得分:1)

您需要将handle声明为void**,而不是void*