Foros - Stratos

Programadores => General Programadores => Mensaje iniciado por: shephiroth en 02 de Noviembre de 2005, 02:15:59 PM

Título: Problema Con La Clase
Publicado por: shephiroth en 02 de Noviembre de 2005, 02:15:59 PM
 Buenas, primero les presento mi codigo:


class dll_struct
{
private:
char* MD5;
char* nombre;
int num;
static int contador;
public:
dll_struct(char* n, char* m)
{
 MD5 = (char*)malloc(sizeof(char)*(strlen(m)+1));
 nombre = (char*)malloc(sizeof(char)*(strlen(n)+1));
 strcpy(nombre,n);
 strcpy(MD5,m);
 num = contador;
 contador++;
}
char* getName()
{
 return nombre;
}
char* getMD5()
{
 return MD5;
}
bool compare (char* n,char* m)
{
 if ((strcmp(nombre,n)==0) && (strcmp(MD5,m)==0))
  return true;
 return false;
}
};
int dll_struct::contador = 0;
class dll
{
private:
std::vector<dll_struct*> libs;
public:
dll(){}//libs.resize(100);cant=0;}
void add (char * nombre, char * MD5)
{
 if (! existe(nombre,MD5))
 {
  dll_struct * nuevo = new dll_struct(nombre,MD5);
  libs.push_back(nuevo);
  printf("MD5:%s NOMBRE:%s\n",nuevo->getMD5(),nuevo->getName());
 }
}
void show()
{
 for (int x=0;x<libs.capacity();x++)
 {
  printf("%03i) MD5[%s] MODULO[%s]\n",x,((dll_struct*)libs[x])->getMD5(),((dll_struct*)libs[x])->getName());
 }
}
bool existe(char * nombre, char * MD5)
{
 int x;
 dll_struct * objeto;
 for (x=0;x<libs.capacity();x++)
 {
  if (((dll_struct*)libs[x])->compare(nombre,MD5))
   return true;
 }
 return false;
}
};


el main seria este



int _tmain(void)
{
dll * nuevo = new dll();
nuevo->add("chocolate","q");
nuevo->add("chocolate","w");
nuevo->add("chocolate","e");
nuevo->add("chocolate","r");
nuevo->add("chocolate","t");
nuevo->add("chocolate","y");
nuevo->add("chocolate","u");
nuevo->add("chocolate","i");
nuevo->add("chocolate","o");
nuevo->show();
return 0;
}


Basicamente voy introduciendo parejas de cadenas.....pero por alguna razon que aun no conozco (por eso vengo a preguntar) en la funcion de dll_struct::compare me salta un error de puntero no inicializado. He debujeado un poco, y al parecer en la llamada "(((dll_struct*)libs
Título: Problema Con La Clase
Publicado por: _Grey en 02 de Noviembre de 2005, 02:47:20 PM
 Las STL no son en absoluto mi expecialidad(lo siento  :P ), pero cuando te da el error?? es decir, te deja meter elementos?, hasta cual??

De todas formas, un par de consejos. cuando direccionas vector como array te devuelve el tipo de dato en el formato que contiene, vamos que no hace falta el cating, deberia vastar libs
Título: Problema Con La Clase
Publicado por: ethernet en 02 de Noviembre de 2005, 03:07:06 PM
 Mira bien la ayuda de los métodos antes de usarlos:

capacity() -> Number of elements for which memory has been allocated. capacity() is always greater than or equal to size()


http://www.sgi.com/tech/stl/Vector.html
Título: Problema Con La Clase
Publicado por: gdl en 02 de Noviembre de 2005, 07:50:23 PM
 Usa size() en vez de capacity().
Título: Problema Con La Clase
Publicado por: shephiroth en 02 de Noviembre de 2005, 08:14:31 PM
 Buenas.

_Grey:
Si me deja añadir elementos. Eso es lo que mas raro me resulta. Antes de dar error deja meter 5 elementos correctamente. El problema lo da cuando se intenta meter el sexto e intenta comprobar si ya existe.

No sabia que podia usar libs
Título: Problema Con La Clase
Publicado por: ethernet en 02 de Noviembre de 2005, 09:11:55 PM
 Es importante que uses iterators, porque si por ejemplo cambias de container no tendrás que variar el código.
Título: Problema Con La Clase
Publicado por: shephiroth en 02 de Noviembre de 2005, 10:42:16 PM
 Buenas.

Bueno, comentaros que cambiando el size, y eliminando el cast, haciendo libs