android - 如何在 Android 中使用 dynamic_cast 修复编译错误?

标签 android c++ g++ dynamic-cast

  1. 我正在使用 Andoird 4.4 kk 在 MTK 平台上工作。

  2. 搭建环境检查结果报告

[操作系统]:Ubuntu 10.04.4(64 位)[确定]

[物理内存大小]:8079280 K 字节[确定]

[制作]: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-bit) [确定]

[野牛]:2.4.1(64 位)[确定]

[弹性]:2.5.35(64 位)[确定]

[gperf]:3.0.3(64 位)[确定]

[mingw]:已安装[确定]

[unix2dos/tofrodos]:已安装 [确定]

  1. 代码

(1) 记录客户端.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: 在成员函数'bool android::NSCamClient::NSRecordClient::RecordClient::handleReturnBuffers(const android::Vector& )': mediatek/platform/mt6592/hardware/mtkcam/v1/hal/client/CamClient/Record/RecordClient.BufOps.cpp:325:68: error: cannot dynamic_cast 'pImgBuf' (of type 'class android::sp' ) 键入“class android::sp”(目标不是指针或引用)

当我删除以下代码时:

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

它工作正常。

如何修复错误?谢谢。

更新:

  1. 我简单的认为android的sp等于指针。所以我更改了代码:

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

新错误:

错误:无法 dynamic_cast 'pImgBuf'(类型为 'class android::sp')以键入 'class android::sp&'(源类型不是多态的)

即使我将虚拟方法添加到源类型 ICameraImgBuf 中,如下所示:

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

最佳答案

dynamic_cast 仅适用于指针或引用

关于android - 如何在 Android 中使用 dynamic_cast 修复编译错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22625756/

相关文章:

C++ 语法错误

gcc - aarch64-linux-gnu-g++ 交叉编译为 arm64 错误

c++ - qmake:处理 gcc 和 msvc 的选项

android - 没有硬件 "Options"按钮,如何让选项菜单出现?

android - 将密码输入流转换为字节数组?

c++ - 如何使用 pair 遍历所有可能的字符对?

linux - 对 %esp 的修改导致 SIGSEGV

android - 如何在 Android Studio 中显示依赖关系树?

android - Flutter 使用 C/C++ 代码构建 - 示例?

c++ - 在Boost R树中存储或访问对象