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;