好的,所以这是我的代码:
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]
我该如何解决?
答案 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 );