void *不是指向对象类型的指针 - 从void **

时间:2016-12-07 12:30:33

标签: c++ data-structures casting void-pointers

我有一个函数Quit正在接收一个void **我需要将它传递给一个接收DataStructure *的新函数。

问题是ds中的数据被垃圾替换。我该怎么办?

void Quit(void** DS){
       DataStructure* ds = (DataStructure*) *DS;
       return ds->Quit(); //'void*' is not a pointer to object type
}

当第二个Quit()的定义是:

void DataStructure::Quit();

并且主要的呼叫如下:

DataStructure *data;
Quit((void**) &ds);

如果我们按照以下方式进行投射,我们会得到相同的结果:

 DataStructure* ds = reinterpret_cast<DataStructure*>(*DS);      

2 个答案:

答案 0 :(得分:2)

演员表工作,它不会像你期望的那样改变DS的类型。

((DataStructure*)* DS)转换*DS的值并将结果抛弃 (您的编译器可能已警告您它没有效果。)

您需要保存转换结果:

void Quit(void** DS){
       DataStructure* ds = (DataStructure*) *DS;
       return ds->Quit();
}

答案 1 :(得分:1)

如果您的DS变量实际上是DataStructure*,则可以简单地投射它:

void Quit(void** DS)
{
       DataStructure* ds = (DataStructure*)DS;
       return ds->Quit();
}