C/Visual C - BUG detectado en la funcion de template antigua

 
Vista:

BUG detectado en la funcion de template antigua

Publicado por Nelek (816 intervenciones) el 16/03/2007 10:44:31
Hola a todos,

despues de estarme mas de media manyana con un fallo de funcionamiento en mi programa, he encontrado un fallo en una de las funciones "Template" para la "CMyList" de las que puse hace un tiempo.

Concretamente me refiero al operador logico de igualdad. En la antigua version devolvia TRUE por defecto y FALSE si alguna de las posiciones no era nula. Esto es totalmente funcional... EXCEPTO PARA EL ULTIMO ELEMENTO, ya que al llegar al ultimo elemento, la "pos" de la lista ya apunta al vacio, pero la lista aun no ha acabado.

Asi que... Aqui esta la nueva version

template <class TYPE, class ARG_TYPE>
BOOL CMyList<TYPE, ARG_TYPE>::operator== (const CMyList &temp)
{
ASSERT_VALID (this);
ASSERT_VALID (&temp);
//To have the number of matches
int nMatches = 0;

//Check for self assignment
if(this == &temp)
return TRUE;

// If the other list has different number of elements, they can't be equal
if (GetCount () != temp.GetCount ())
return FALSE;

POSITION posThis = GetHeadPosition ();
POSITION posOther = temp.GetHeadPosition ();
while ((posThis)&&(posOther))
{ //This is to look for in the same place in both lists
TYPE thisTYPE = (TYPE)GetNext(posThis);
TYPE otherTYPE = (TYPE)temp.GetNext(posOther);

//This template presupposes that the TYPE object has the operator==
if (thisTYPE == otherTYPE)
nMatches++;
}
//So many matches as elements... both lists are equal
if (nMatches == GetCount ())
return TRUE;

return FALSE;
}

Espero que os sirva :) Cuando acabe con mi proyecto y este seguro que todas las funciones nuevas funcionan correctamente, ya colgare una recopilacion de las nuevas funciones que tengo (o la version original con las ampliaciones anyadidas) en la pagina de donde saque la template original.

Nota: Sigo aceptando consejos o mejoras
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder