2014-03-25 86 views
1
  1. 我正在使用Andoird 4.4kk在MTK平臺上工作。如何在Android中使用dynamic_cast修復編譯錯誤?

  2. 構建環境檢查結果報告

[OS]:Ubuntu的10.04.4(64位)[OK]

[物理內存大小]:8079280 K-字節[OK]

[使]:3.81(64位)[OK]

[perl的]:5.10.1(64位)[OK]

[蟒]:2.6.5(64位)[OK]

[臂-Linux的androideabi-GCC]:4.7(64位)[OK]

[GCC]:4.4.3 (64位)[OK]

[JDK]:1.6.0_33(64位)[OK]

[野牛]:2.4.1(64位)[OK]

[flex]:2.5.35(64-bit)[OK]

[gperf]:3.0.3(64-bit)[OK]

[mingw的]:安裝[OK]

[unix2dos/tofrodos]:安裝[OK]

  1. 代碼

(1) RecordClient.BufOps.cpp:

... 
RecBufManager mpImgBufMgr; 
mpImgBufMgr.init(); 
... 

// Here is what I want to do 
sp<ICameraImgBuf> pImgBuf = mpImgBufMgr->getBuf(1); 
sp<RecImgBuf> pRecImgBuf = dynamic_cast<sp<RecImgBuf> >(pImgBuf); 

(2)

class RecImgBuf : public ICameraImgBuf { 

public: 
    virtual       ~RecImgBuf(); 
} 

(3)

class RecBufManager : public RefBase 
{ 
public: 
    sp<ICameraImgBuf>const&   getBuf(size_t index) const { return mvImgBuf[index]; } 

private: 
    Vector< sp<ICameraImgBuf> >  mvImgBuf; 
} 

(4)

bool 
RecBufManager:: 
init(){ 
... 
RecImgBuf* pRecImgBuf = RecImgBuf::alloc(...); 
mvImgBuf.push_back(pRecImgBuf); 
... 
} 

(5)

class ICameraImgBuf : public IImgBuf, public ICameraBuf 
{ 
}; 

然後我得到的錯誤: 聯/平臺/ mt6592 /硬件/ mtkcam/v1/hal/client/CamClient/Record/RecordClient.BufOps.cpp:在成員函數'bool android :: NSCamClient :: NSRecordClient :: Reco rdClient :: handleReturnBuffers(const android :: Vector &)': mediatek/platform/mt6592/hardware/mtkcam/v1/hal/client/CamClient/Record/RecordClient.BufOps。cpp:325:68:error:can not dynamic_cast'pImgBuf'(type'class android :: sp')鍵入'class android :: sp'(target is not pointer or reference)

當我刪除以下代碼:

sp<RecImgBuf> pRecImgBuf = dynamic_cast<sp<RecImgBuf> >(pImgBuf); 

它工作正常。

如何解決該錯誤?謝謝。

UPDATE:

  1. 我只是想到了android的SP等於指針。所以我改變了代碼:

    sp<RecImgBuf>& pRecImgBuf = dynamic_cast<sp<RecImgBuf>& >(pImgBuf); 
    

新的錯誤:

錯誤:無法將dynamic_cast( '級的android :: SP' 的類型)「pImgBuf爲鍵入「類機器人:: SP &'(源類型不是多態

即使通過我添加虛擬方法到源類型ICameraImgBuf,像這樣:

class ICameraImgBuf : public IImgBuf, public ICameraBuf 
{ 
public: 
    virtual       ~ICameraImgBuf(){} 
}; 
+0

什麼是sp 中的sp? – cppcoder

回答

0

dynamic_cast僅適用於指針或引用

+0

我只是認爲android中的sp等於指針。我錯了。 –

+0

我更新了代碼:sp &pRecImgBuf = dynamic_cast &>(pImgBuf); ,但是新的錯誤:error:can not dynamic_cast'pImgBuf'(類型爲'class android :: sp ')鍵入'class android :: sp &'(源類型不是多態) –

+0

即使我將虛擬〜ICameraImgBuf(){}添加到源類型(ICameraImgBuf) –

相關問題