我正在使用Andoird 4.4kk在MTK平臺上工作。如何在Android中使用dynamic_cast修復編譯錯誤?
構建環境檢查結果報告
[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) 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:
我只是想到了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(){}
};
什麼是sp中的sp? –
cppcoder