duda con punteros
Publicado por Nelek (816 intervenciones) el 27/02/2007 16:26:04
Hola,
Son iguales estas expresiones?
CMyObject* pTemp = new CMyObject;
*pObj = pDoc->FindNamed (m_szSelName);
if (pObj->m_szName != "")
//Hago lo que me interesa
y
CMyObject* pTemp = new CMyObject;
pObj = &pDoc->FindNamed (m_szSelName);
if (pObj->m_szName != "")
//Hago lo que me interesa
Mi objetivo es poder modificar el parametro de uno de mis objetos, que esta guardado en una lista de dichos objetos dentro del documento, pero SIN traerme el objeto en si. Por eso estoy trabajando por punteros y referencias, pero aun no me aclaro del todo con ellos.
La funcion que busca es:
CMyObject& CMyDoc::FindNamed(const CString szName)
{
CMyObject* roEmpty = new CMyObject;
//Si la lista esta vacia devuelvo uno vacio.
if (m_cmlObjectSet.IsEmpty ())
return *roEmpty;
POSITION pos= m_cmlObjectSet.GetHeadPosition ();
while (posReg)
{
CMyObject tempObj = m_cmlObjectSet.GetNext (pos);
//Si encuentro el nombre que busco, devuelvo el objeto (GetPrev porque pos ya apunta al
//siguiente)
if ((tempObj.m_szName == szName) && (pos != NULL))
return m_cmlObjectSet.GetPrev (pos);
//Si encuentro el que quiero y es el ultimo de la lista
else if ((tempObj.m_szName == szName) && (pos == NULL))
return m_cmlObjectSet.GetTail ();
}
// Si no lo encuentro, devuelvo vacio
return *roEmpty;
}
Nota:
En el constructor de CMyObject inicializo: m_szName = ""; por eso luego pregunto si esta asi para ver si me ha devuelto el objeto vacio y diferenciar del objeto de la lista.
-----------
Fallos no me da al compilar, pero sin embargo no me funciona bien. :S
Se supone que al poner un return por una referencia en mi funcion de busqueda el propio compilador toma la variante TYPE& GetPrev (pos) y TYPE& GetTail () que pone en la documentacion, no?
Acepto cualquier tipo de mejora, sugerencia, consejo... Gracias
Son iguales estas expresiones?
CMyObject* pTemp = new CMyObject;
*pObj = pDoc->FindNamed (m_szSelName);
if (pObj->m_szName != "")
//Hago lo que me interesa
y
CMyObject* pTemp = new CMyObject;
pObj = &pDoc->FindNamed (m_szSelName);
if (pObj->m_szName != "")
//Hago lo que me interesa
Mi objetivo es poder modificar el parametro de uno de mis objetos, que esta guardado en una lista de dichos objetos dentro del documento, pero SIN traerme el objeto en si. Por eso estoy trabajando por punteros y referencias, pero aun no me aclaro del todo con ellos.
La funcion que busca es:
CMyObject& CMyDoc::FindNamed(const CString szName)
{
CMyObject* roEmpty = new CMyObject;
//Si la lista esta vacia devuelvo uno vacio.
if (m_cmlObjectSet.IsEmpty ())
return *roEmpty;
POSITION pos= m_cmlObjectSet.GetHeadPosition ();
while (posReg)
{
CMyObject tempObj = m_cmlObjectSet.GetNext (pos);
//Si encuentro el nombre que busco, devuelvo el objeto (GetPrev porque pos ya apunta al
//siguiente)
if ((tempObj.m_szName == szName) && (pos != NULL))
return m_cmlObjectSet.GetPrev (pos);
//Si encuentro el que quiero y es el ultimo de la lista
else if ((tempObj.m_szName == szName) && (pos == NULL))
return m_cmlObjectSet.GetTail ();
}
// Si no lo encuentro, devuelvo vacio
return *roEmpty;
}
Nota:
En el constructor de CMyObject inicializo: m_szName = ""; por eso luego pregunto si esta asi para ver si me ha devuelto el objeto vacio y diferenciar del objeto de la lista.
-----------
Fallos no me da al compilar, pero sin embargo no me funciona bien. :S
Se supone que al poner un return por una referencia en mi funcion de busqueda el propio compilador toma la variante TYPE& GetPrev (pos) y TYPE& GetTail () que pone en la documentacion, no?
Acepto cualquier tipo de mejora, sugerencia, consejo... Gracias
Valora esta pregunta


0