从'void *'到class(c ++)的无效转换

时间:2014-04-28 22:28:12

标签: c++ pointers type-conversion

好的,所以这是我的代码:

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;)时,我得到:

  

来自&#39; void *&#39;的无效转换到&#39;系统*&#39; [-fpermissive]

我该如何解决?

2 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:2)

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

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