C++ std::映射分配错误:无法在赋值中将' type **'转换为'type *'

c++ std::map asignation error : cannot convert ' type **' to 'type *' in assignment

本文关键字:type 转换 赋值 分配 映射 std 错误 C++      更新时间:2023-10-16

hi我正在尝试开发一个简单的类,它可以管理映射列表,该类使用模板。

#include <map>    
template<class R, typename IDPK = int >
    class ActivationList
    {
    public:
        typedef     R   type_value;
        typedef     R*  pointer_type_value;
        typedef     const R * const_point_type_value;
        typedef    R &      reference_type;
        typedef const R &   const_reference_type;
        typedef const IDPK & const_ref_ID_PK_value;
        typedef const IDPK const_Type;
        typedef R ** ptr_reference_Type;
        /**
         * @brief ActivationList constructor explicito de la luista de activacion
         * @param aType primer mensaje para alojar en
         * @param aIdPK  identificador unico
         */
        explicit ActivationList(pointer_type_value aType , const_ref_ID_PK_value aIdPK)
        {
        }
        /**
         * @brief setSize
         * @param aSize
         */
        void setSize(const int & aSize)
        {
            mSize=aSize;
        }
        /**
         * @brief getSize
         * @return
         */
        int getSize() const
        {
            return this->mSize;
        }
        /**
         * @brief isEmpty
         * @return
         */
        bool isEmpty() const
        {
            return this->mListMessage->empty();
        }
        /**
         * @brief isFull
         * @return
         */
        bool isFull() const
        {
            return (mListMessage->size()==mSize);
        }
        /**
         * @brief insertValuesInMapLis inserta valores dentro de la lista de activacion
         * @param aType puntero al la estructura que se quiere guardar
         * @param aIdPK primary Key para realizar asociacion de la estructura de mensaje con respecto al ID mensaje
         * @return 0=OK, negativo lo contrario
         */
        int insertValuesInMapLis(pointer_type_value aType , const_ref_ID_PK_value aIdPK)
         {
            if (!aType) return -1;
            if (aIdPK<0) return -2;
            mListMessage->insert(std::pair<const_ref_ID_PK_value, pointer_type_value>(aIdPK,aType));
            return 0;
          }

        /**
         * @brief findMessageId metdo que busca dentro de la lista de activacion segun una Primary Key
         * @param aReferenceType valor donde se almacenara el valor buscado
         * @param aPKValue valor de la primary key a buscar, en este caso caso el IDMensaje
         * @param aResult resulta de la operacion, 0=OK, negativo de lo contrario
         */
        void findMessageId(reference_type aReferenceType,const int & aPKValue, int & aResult)
        {
            if (aPKValue < 0) {
                aResult=-1;
                return;
            }
            //buscar valor dentro de la lista
            mMessageListIterador=mListMessage->find(aPKValue);
            if (mMessageListIterador!=mListMessage->end())
            {
                aResult=0;
                aReferenceType=mMessageListIterador->second;
            }
            else aResult=-1;
            return;
        }

        void findMessageId(R * aPointerType,const int & aPKValue, int & aResult)
        {
            if (aPKValue < 0) {
                aResult=-1;
                return;
            }
            //buscar valor dentro de la lista
            mMessageListIterador=mListMessage->find(aPKValue);
            if (mMessageListIterador!=mListMessage->end())
            {
                aResult=0;
                aPointerType=&mMessageListIterador->second;
            }
            else aResult=-1;
            return;
        }
        /**
         * @brief push metodo que inserta un mensaje en la lista de activacion
         * @param aType mensaje que se va a ingresar a la lista
         * @param aIdPK identificador unico del mensaje . IDMessage
         * @return  0=OK, negativo lo contrario
         */
        int  push(pointer_type_value aType , const_ref_ID_PK_value aIdPK )
        {
            return insertValuesInMapLis(aType ,aIdPK);
        }
        /**
         * @brief pop metodo que extrae un mensaje de la pila
         * @param aReferenceType valor donde se depositara el valor requerido
         * @param aPKValue primary key del mensaje buscado = IDMensaje
         * @param aResult 0=OK, negativo lo contrario
         *
         */
        void pop(reference_type aReferenceType,const int & aPKValue, int & aResult)
        {
            findMessageId(aReferenceType, aPKValue, aResult);
        }
        /**
         * @brief cleanList metodo que eliminia todos los mensajes de la lista
         */
        void cleanList()
        {
            mListMessage->clear();
        }
        /**
         * @brief eraseMessage elimina un mensaje en particular
         * @param aIDMessage identificador unico del mensaje
         *  @param aResult 0=OK, negativo lo contrario
         */
        void eraseMessage(const int & aIDMessage, int & aResult)
        {
            aResult=-1;
            mMessageListIterador=mListMessage->find(aIDMessage);
            if (mMessageListIterador==mListMessage->end())
            {
                //eliminacion del mensaje
                mListMessage->erase(aIDMessage);
                aResult=0;
                //
            }
        }
        private:
            ActivationList();
            ActivationList(const ActivationList &);
            const ActivationList & operator=(const ActivationList &);
            std::map<const_Type, pointer_type_value  > * mListMessage;
            typename std::map<const_Type, pointer_type_value >::iterator mMessageListIterador;
            int mSize;
    };

然后,主要使用:

    ActivationList<IMetodo,int> aActivationList(0,12);
    aActivationList.push(aMessageQueue,1221);
        //int aResultType=0;
IMetodo * aMethodPointer=0;
        aActivationList.findMessageId(aMethodPointer,1221,aResul

编译器输出:

cannot convert 'IMetodo**' to 'IMetodo*' in assignment

我已经花了很多时间试图找出问题出在哪里,但我看不出是哪里。有人能帮忙吗?

  void findMessageId(R * aPointerType,const int & aPKValue, int & aResult)
        {
            if (aPKValue < 0) {
                aResult=-1;
                return;
            }
            //buscar valor dentro de la lista
            mMessageListIterador=mListMessage->find(aPKValue);
            if (mMessageListIterador!=mListMessage->end())
            {
                aResult=0;
                aPointerType=&mMessageListIterador->second;
            }
            else aResult=-1;
            return;
        }

在这种方法中,我更改了这一行:

  aPointerType=&mMessageListIterador->second;

为此:

aPointerType=mMessageListIterador->second;