我有一个函数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);
答案 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();
}