错误:“void*”不是指向对象的指针类型

Error: ‘void*’ is not a pointer-to-object type

本文关键字:对象 类型 指针 void 错误      更新时间:2023-10-16

我正在尝试从动态库中访问函数,该函数实例化Person的实例,并将指向它的指针作为void指针返回。然后,程序必须使用reinterpret_cast将 void 指针投射到 Person。但是,我收到一个错误:错误:"void*"不是指向对象的指针类型。

这是代码:

库中的函数:

void* loadPerson (void) {
    return reinterpret_cast<void*>(new Person);
}

主.cpp:

void* loadPerson = dlsym(lib_handle, "loadPerson");
void* person_vp = (*loadPerson)();
Person* person = reinterpret_cast<Person*>(person_vp);
if (dlerror() != NULL) 
   cout<<"Library init error."<<endl;  
else {
   //...

谢谢!

有问题的行是:

void* person_vp = (*loadPerson)();

您正在取消引用void*。你需要这个:

void* person_vp = (*reinterpret_cast<void* (*)()>(loadPerson))();

编辑:

为了更好的可读性,可以像这样拆分演员表:

typedef void* VoidFunc();
VoidFunc* loadPerson_func = reinterpret_cast<VoidFunc*>(loadPerson);
void* person_vp = (*loadPerson_func)();