2014-04-28 84 views
0

好了,这里是我的代码:从“无效*”无效的转换类(C++)

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(系统*系统= DS)获得:

从 '无效*' 到 '系统*' 无效的转换[-fpermissive]

我该如何解决这个问题

+5

可怕的代码。你确定你知道C++吗? – Puppy

+0

不是......但是,谢谢:) –

回答

2

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

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

非常感谢你! 我爱这个网站!!!!!!! –

3

既然你知道DSSystem*型的,你应该改变的参数类型:

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

如果你碰巧传递void*作为第一个参数,你应该重构你的代码,以便你不必。

+1

@BobSacamano,“这里是**我的**代码” – Shoe

+0

@BobSacamano请现在看你的语言。那会做。 – sehe