我有一个正在接收void **的函数退出,我需要将其传递给正在接收数据架构*的新功能。
问题在于,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);
铸件有效,它不会像您期望的那样更改DS
的类型。
((DataStructure*)* DS)
转换*DS
的值并将结果扔掉。
(您的编译器可能已经警告您没有效果。)
您需要保存转换的结果:
void Quit(void** DS){
DataStructure* ds = (DataStructure*) *DS;
return ds->Quit();
}
如果您的DS
变量实际上是DataStructure*
,则可以简单地施放它:
void Quit(void** DS)
{
DataStructure* ds = (DataStructure*)DS;
return ds->Quit();
}