我正在使用Andoird 4.4 kk在MTK平台上工作。
构建环境检查结果报告
[OS]:Ubuntu 10.04.4(64位)[确定]
[物理内存大小]:8079280 K-Bytes [确定]
[make]:3.81(64位)[确定]
[perl]:5.10.1(64位)[确定]
[python]:2.6.5(64位)[确定]
[arm-linux-androideabi-gcc]:4.7(64位)[确定]
[gcc]:4.4.3(64位)[确定]
[jdk]:1.6.0_33(64位)[确定]
[bison]:2.4.1(64位)[确定]
[flex]:2.5.35(64位)[确定]
[gperf]:3.0.3(64位)[确定]
[mingw]:已安装[确定]
[unix2dos / tofrodos]:已安装[确定]
(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
{
};
然后我得到了错误: mediatek / platform / mt6592 / hardware / mtkcam / v1 / hal / client / CamClient / Record / RecordClient.BufOps.cpp:在成员函数&#39; bool android :: NSCamClient :: NSRecordClient :: RecordClient :: handleReturnBuffers(const android ::向量&安培;)&#39 ;: mediatek / platform / mt6592 / hardware / mtkcam / v1 / hal / client / CamClient / Record / RecordClient.BufOps.cpp:325:68:错误:不能dynamic_cast&#39; pImgBuf&#39; (类型&#39;类android :: sp&#39;)键入&#39;类 android :: sp&#39; (目标不是指针或参考)
当我删除以下代码时:
sp<RecImgBuf> pRecImgBuf = dynamic_cast<sp<RecImgBuf> >(pImgBuf);
它工作正常。
如何修复错误?感谢。
更新
我只是认为android的sp等于指针。所以我改变了代码:
sp<RecImgBuf>& pRecImgBuf = dynamic_cast<sp<RecImgBuf>& >(pImgBuf);
新错误:
错误:不能dynamic_cast&#39; pImgBuf&#39; (类型&#39;类android :: sp&#39;)键入&#39;类android :: sp&amp;&#39; (源类型不是多态的)
即使我将虚方法添加到源类型ICameraImgBuf中,如下所示:
class ICameraImgBuf : public IImgBuf, public ICameraBuf
{
public:
virtual ~ICameraImgBuf(){}
};
答案 0 :(得分:0)
dynamic_cast仅适用于指针或引用