gpt4 book ai didi

c++ std::map 分配错误:无法在分配中将 ' type **' 转换为 'type *'

转载 作者:行者123 更新时间:2023-11-28 07:28:43 25 4
gpt4 key购买 nike

您好,我正在尝试开发一个可以管理 map 列表的简单类,该类使用模板。

#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;

关于c++ std::map 分配错误:无法在分配中将 ' type **' 转换为 'type *',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18194415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com