none
Operador == en template RRS feed

  • Pregunta

  • Creé un template para una lista simplemente enlazada con nodos simplemente enlazados que tienen el apuntador al siguiente y un dato <T> , pero en una función de buscar que empiezo a ver nodo por nodo si el dato es igual al que estoy buscando necesito ver si el dato del nodo es igual al que estoy buscando, estoy usando el operador == en un if para saber si es igual o no pero el == no funciona porque necesitaría  sobrecargarlo, ¿alguien sabe como debería de ser?

    Mi función es la siguiente y regresa la posición donde esta el valor, el error esta subrayado y de negritas, cursor.Obtener() devuelve un tipo <T> 

    public int buscar (T dat)
            {
                int cont = 0;
                NodoSE<T> cursor = cabeza;
                while (cont < longitud)
                {
                    if (cursor.Obtener()==dat)
                    {
                        cont++;
                        cursor = cursor.Get_Sig();
                    }
                    else
                    {
                        break;
                    }
                }
                if(cont==longitud)
                {
                    cont = -1;
                }
                return cont;
            }


    • Editado Guigoys lunes, 3 de septiembre de 2018 5:52
    lunes, 3 de septiembre de 2018 5:50

Respuestas

  • Se ta ha olvidado copiar el mensaje exacto del error. Sospecho que te debe estar diciendo que el tipo T no soporta el operador de comparación. SI es así, puedes solucionarlo escribiendo la sentencia así:

    if (cursor.Obtener().Equals(dat))

    Pero ojo, esto llamará al operador Equals heredado de Object, el cual no necesariamente hará una comparación del valor de dat, sino que te comparará la referencia de dat salvo que el tipo T haga un override que le permita comparar por valor. Con datos numéricos o strings funcionará bien, pero si T es una clase deberías meter dentro de la clase un override de Equals.

    lunes, 3 de septiembre de 2018 6:17
    Moderador