您好我正在尝试开发一个可以管理地图列表的简单类,类使用模板。
#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
我已经花了很多时间尝试确定问题出在哪里,但我看不出它在哪里。有人可以帮忙吗?
答案 0 :(得分:1)
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;