2013-01-10 83 views
0

我正在使用Visual C++。你能否以這種語法提供幫助?錯誤表達式

class CVisionSystem 
    { 
    public: 
CVisionSystem(); 
~CVisionSystem(void); 


int Init(); 


    private: 

PvDevice device; 
// PvStream object 
     PvStream stream; 
// Buffer 

    CustomPipeline *pipeline; 

// GEV Parameters 
PvGenParameterArray *deviceParams; 
    PvGenInteger *parTLLocked; 

}; 

int CVisionSystem::Init() 
{ 
deviceParams = device.GetGenParameters();  
parTLLocked = dynamic_cast<PvGenInteger *>(deviceParams->Get("TLParamsLocked")); 

} 

deviceParms得到有效價值,但parTLlocked獲取導致錯誤NULL值:「錯誤表達無法計算,_vfptr CX0030和mthis CX0076

什麼可以ParTLLocked的問題

+1

'deviceParams->獲取(「TLParamsLocked」)'不能被強制轉換爲'PvGenInteger *' –

+0

這將有很大的幫助,如果你說你正在使用的庫。 – molbdnilo

回答

1

我猜deviceParams->Get("TLParamsLocked")返回一個不能被動態轉換成PvGenInteger *的類型返回類型應該是指向一個子類或者父類PvGenInteger(或者可能是同一個類)的指針,空值

+0

那麼,有什麼可以解決的?並請再次查看編輯的問題 – Nabeel

+0

請至少添加class heirarchy,以便我可以回答您的問題。 –

+0

我希望我編輯dat問你問。 – Nabeel

1

如果dynamic_cast無法轉換爲目標類型,則返回空值。你應該檢查這個。

對於動態轉換成功,被轉換的對象必須在其繼承樹中的某處存在目標類類型。這就是目標類型必須是運行時對象的實際類型或其父類之一。這意味着您只能向下轉換實際爲目標類型的對象。

+0

如果你用簡單的話來解釋它會很好。我很抱歉,我沒有得到你的答案 – Nabeel

0
PvGenParameterArray *lDeviceParams = d->lDevice.GetGenParameters();  
lTLLocked = dynamic_cast<PvGenInteger *>(lDeviceParams->Get("TLParamsLocked"));