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

时间:2014-03-25 04:57:39

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

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

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

  3. [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. 代码
    2. (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);
      

      它工作正常。

      如何修复错误?感谢。

      更新

      1. 我只是认为android的sp等于指针。所以我改变了代码:

        sp<RecImgBuf>& pRecImgBuf = dynamic_cast<sp<RecImgBuf>& >(pImgBuf);
        
      2. 新错误:

        错误:不能dynamic_cast&#39; pImgBuf&#39; (类型&#39;类android :: sp&#39;)键入&#39;类android :: sp&amp;&#39; (源类型不是多态的

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

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

1 个答案:

答案 0 :(得分:0)

dynamic_cast仅适用于指针或引用

相关问题