从 'void*' 到类的转换无效(C++)

invalid conversion from 'void*' to class(c++)

本文关键字:无效 转换 C++ void      更新时间:2023-10-16

好的,这是我的代码:

StatusType System::AddJobSearcher(void *DS, int engineerID, int reqSalary) {
    if(DS == NULL || engineerID < 0 || reqSalary < 0) return INVALID_INPUT;
    System* system = DS;
    Engineer* engineer = new Engineer(engineerID, reqSalary);
    if(!engineer) return ALLOCATION_ERROR;
    if(system->All.isIn(*engineer->generateIdKey())) { 
        delete(engineer);
        return FAILURE;
    }
    system->All.insert(*engineer->generateIdKey(), *engineer); 
    return SUCCESS;
}

现在,系统是一个类,DS应该是指向一个类的指针。当我尝试将新创建的系统指向DS(system*system=DS;)时,我得到:

从"void*"到"System*"的转换无效[-fpermission]

如何解决

由于您知道DS的类型为System*,因此应该更改参数类型:

StatusType System::AddJobSearcher(System* DS, int engineerID, int reqSalary) {
//                                ^^^^^^

如果你碰巧传递了一个void*作为第一个参数,你应该重构你的代码,这样你就不必这么做了

在C++(与C相反)中,不能将类型为void *的指针隐式转换为其他类型的指针。你必须明确地这样做

System* system = static_cast<System*>( DS );