C++ c++;std::映射指定错误:无法转换';类型**';至';类型*';委派

C++ c++;std::映射指定错误:无法转换';类型**';至';类型*';委派,c++,stl,C++,Stl,嗨,我正在尝试开发一个简单的类,可以管理地图列表,该类使用模板 #include <map> template<class R, typename IDPK = int > class ActivationList { public: typedef R type_value; typedef R* pointer_type_value; typedef cons

嗨,我正在尝试开发一个简单的类,可以管理地图列表,该类使用模板

#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;
    };
我花了很多时间试图找出问题出在哪里,但我看不到问题出在哪里。有人能帮忙吗

  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;

问题在这里
apointerpype=&mmessageliterador->second
mmessageliterador
存储指针(
pointer\u type\u value
),然后返回指针的地址(
IMetodo**
),并尝试将其分配给
IMetodo*
。这正是问题所在!,谢谢!!!不幸的是,这不起作用,
apointerpype
是指针的本地副本,重新分配它并不意味着传递给
findMessageId
的指针在函数返回后将指向对象。是的,你又对了,我必须将其更改为使用双指针。或者只需将
R*apointerpype
更改为
R*&apointerpype
  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;