2014-04-28 85 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