• Viernes 19 de Abril de 2024, 23:46

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - Diodo

Páginas: 1 2 [3] 4 5 ... 30
51
C/C++ / Re: Apuntar A Null Al Destruir
« en: Martes 12 de Diciembre de 2006, 16:25 »
Citar
Bueno Diodo, al parecer estas usando generics 

Generics son las templates? en tal caso si, pero solo es una parte de la libreria que estoy haciendo, o mas bien adaptando. Se trata de una libreria para trabajar con entornos virtuales de robots

Citar
1- Me parece más sano que arrojes una excepcion cuando te envien como parametro algo que apunte a NULL.

Lo tendre en cuenta, aunque primero debo saber como capturar esos ptros a objetos que no existen o han sido destruidos

Citar
2- La lista deberias inicializarla en el constructor de la clase, la lista vacia de por si no ocupa nada de memoria, asi que no seria un alto costo tenerla inicializada siempre.

Si la tengo en el constructor de la clase, el codigo que puse era una simplificacion del problema

52
C/C++ / Re: Apuntar A Null Al Destruir
« en: Martes 12 de Diciembre de 2006, 16:15 »
Ya se que no tiene logica, pero el caso es que estoy haciendo una libreria, y quiero evitar los errores en tiempo de ejecucion y que se muestre un error de que esta haciendo mal el que este usando la libreria

53
C/C++ / Re: Apuntar A Null Al Destruir
« en: Martes 12 de Diciembre de 2006, 16:08 »
Este es el codigo de Insertar en la plantilla

Código: Text
  1.  
  2.   void Insertar(T *nodo)
  3.   {
  4.     if(nodo!=NULL)
  5.     {
  6.       lista *p1,*p2;
  7.       p1=list;
  8.       if(p1==NULL)
  9.       {
  10.         p1=new lista();
  11.         if(p1!=NULL)
  12.         {
  13.           p1->act=nodo;
  14.           p1->next=NULL;
  15.           list=p1;
  16.         }  
  17.       }
  18.       else
  19.       {
  20.         while(p1->next!=NULL)
  21.           p1=p1->next;
  22.         p2=new lista();
  23.         if(p2!=NULL)
  24.         {
  25.           p2->act=nodo;
  26.           p2->next=NULL;
  27.           p1->next=p2;
  28.         }
  29.       }
  30.     }
  31.     else
  32.     {
  33.       //PORHACER error nodo nulo
  34.       printf("esta introduciendo un nodo NULO");
  35.     }
  36.   };
  37.  
  38.  

54
C/C++ / Re: Apuntar A Null Al Destruir
« en: Martes 12 de Diciembre de 2006, 16:06 »
Lo quiero hacer para esto

Código: Text
  1.  
  2. SMRentorno *ent1=new SMRentorno("ent1"); // un objeto
  3. SMRentorno *ent2=new SMRentorno("ent2"); // otro
  4. delete ent2; // destruyo el ultimo
  5. SMRlista<SMRentorno> list; // lista enlazada
  6. list.Insertar(ent1); // inserto el primero
  7. list.Insertar(ent2); // inserto el segundo (se me cuela pq no se como ver si esta destruido)
  8. list.Vaciar(); // al vaciar la lista e ir destruyendo da un error de ejecucion al colarse un ptro a una zona vacia
  9.  
  10.  

list es una template que estoy haciendo para listas enlazadas. En el metodo insertar quiero evitar que se me cuelen punteros vacios o que apunten a un objeto ya destruido, por eso queria que apuntase a NULL al destruirlos

55
C/C++ / Re: Apuntar A Null Al Destruir
« en: Martes 12 de Diciembre de 2006, 15:33 »
Si, lo que probe fue esto:

Código: Text
  1.  
  2. void SMRentorno::operator delete( void *p )
  3. {
  4.   free(p);
  5.   p=NULL;
  6. }
  7.  
  8.  

pero no me cambia el ptro a NULL

56
C/C++ / Apuntar A Null Al Destruir
« en: Martes 12 de Diciembre de 2006, 15:16 »
Hola

Como podria hacer para que al destruir un objeto su puntero se quede apuntando a NULL

El caso es este:

Código: Text
  1.  
  2. objeto *obj1=new objeto();
  3. delete obj1;  // Aqui el puntero se queda apuntado a algo que no es NULL
  4. if(obj1==NULL)printf("es null"); // y aqui no me caza los NULL
  5.  
  6.  

He probado en el destructor pero no se muy bien como hacerlo

Gracias y salu2

57
C/C++ / Re: Cast En Parametro De Funcion Antes De Su Llamada
« en: Miércoles 6 de Diciembre de 2006, 11:56 »
Perdonar, se me fue la pinza  ;)  y no me di cuenta que estaba haciendo la herencia de las hijas privada, por eso no me dejaba meter en la funcion, las hijas como ptro a la madre

Gracias por el interes

salu2

58
C/C++ / Re: Cast En Parametro De Funcion Antes De Su Llamada
« en: Martes 5 de Diciembre de 2006, 23:29 »
No se a que te refieres con la vuelta.  ;)  Pero vamos, la idea es que quiero meter clases hijas como puntero a la clase madre, si no lo hiciera asi tendria que tener un metodo especifico para agregar cada tipo de clase hija

59
C/C++ / Cast En Parametro De Funcion Antes De Su Llamada
« en: Martes 5 de Diciembre de 2006, 10:08 »
Hola.

Tengo una clase B con un metodo para agregar objetos de otras clases a un contenedor. Las otras clases derivan todas de una clase abstracta A y quiero pasarle al metodo agregar de la clase B un puntero pero a la clase madre.
De momento tengo esto:

int AgregarConCast(A *obj);
# define Agregar(ob) AgregarConCast((A *)(ob));

La funcion a usar seria la del macro que haria el cast y luego llamaria al metodo de la clase

Existe alguna forma mas elegante de hacer esto?? O algun mecanismo de c++ que este olvidando?

Gracias

salu2

60
C/C++ / Re: Problemas Con Los Includes
« en: Sábado 2 de Diciembre de 2006, 11:31 »
Al final hice eso que comentas, gracias

61
C/C++ / Re: Problemas Con Los Includes
« en: Jueves 30 de Noviembre de 2006, 10:35 »
Pues son estas 2 clases:

Código: Text
  1.  
  2. extern "C" class  PROYECTOSMR_API SMRcuaternio
  3. {
  4.   private:
  5.     float valores[4];
  6.   public:
  7.     //Constructores
  8.     SMRcuaternio();
  9.     SMRcuaternio(float c0,float c1,float c2,float c3);
  10.     SMRcuaternio(float ang,SMRvector eje);
  11.     SMRcuaternio(SMRpunto3D euler);
  12.     //Sobrecarga de Operadores
  13.     bool operator==(const SMRcuaternio& c);
  14.     float& operator [](int i);
  15.     SMRcuaternio operator+(const SMRcuaternio& c);
  16.     SMRcuaternio operator-(const SMRcuaternio& c);
  17.     SMRcuaternio operator*(const SMRcuaternio& c);
  18.     SMRcuaternio operator*(float escalar);
  19.     SMRcuaternio& operator = (const SMRcuaternio& c);
  20.     //Otros Metodos
  21.     SMRcuaternio GetConjugado();
  22.     float *GetValQ(){return this->valores;}
  23. };
  24.  
  25.  

Código: Text
  1.  
  2. extern "C" class  PROYECTOSMR_API SMRpunto3D
  3. {
  4.   private:
  5.     float valores[3];
  6.  
  7.   public:
  8.     SMRpunto3D();
  9.     SMRpunto3D(float v1,float v2,float v3);
  10.     SMRpunto3D operator-(const SMRpunto3D& p);
  11.     int operator*(const SMRpunto3D& p); // prod escalar
  12.     SMRpunto3D operator*(float escalar);
  13.     SMRpunto3D operator& (const SMRpunto3D &p); // prod mixto
  14.     SMRpunto3D& operator = (const SMRpunto3D& p);
  15.     float& operator [](int i);
  16.     float *GetVector(){return this->valores;}
  17.     SMRpunto3D GiraByCuaternio(SMRcuaternio c);
  18.     float GetNorma();
  19.     friend ostream& operator<<(ostream&, const SMRpunto3D&);
  20. };
  21.  
  22.  

Las lineas que instancian a las otras clases son:

En SMRcuaternio: Un constructor por un SMRpunto3D que representa los angulos rpy

En SMRpunto3D: GiraByCuaternio que gira un punto segun un cuaternio dado por parametro

Antes las tenia en un solo archivo y no tenia problemas

Si no hay solucion a ese problema quizas pueda plantearlo de otra forma si

Gracias

62
C/C++ / Problemas Con Los Includes
« en: Jueves 30 de Noviembre de 2006, 09:58 »
Hola

Resulta que tengo 2 archivos .h donde quiero meter 2 clases, cada clase tendra atributos o llamadas a variables de la otra clase. Se que en estos casos hay que evitar redefiniciones pero no se muy bien como aplicar los condicionales de compilacion

Esta es una simplificacion de lo que he hecho

Código: Text
  1.  
  2. #include "A.h"
  3.  
  4. #ifndef _B_H_
  5. #define _B_H_
  6.  
  7. class B  
  8. {
  9. private:
  10.   A objA;
  11. public:
  12.   B();
  13.   virtual ~B();
  14. };
  15. #endif
  16.  
  17.  

Código: Text
  1.  
  2. #include "B.h"
  3.  
  4. #ifndef _A_H_
  5. #define _A_H_
  6.  
  7. class A  
  8. {
  9. private:
  10.   B objB;
  11. public:
  12.   A();
  13.   virtual ~A();
  14. };
  15. #endif
  16.  
  17.  
  18.  

Dependiendo si pongo los includes dentro o fuera de la definicion me da 1 error u otro.

Si los pongo fuera me dice que tengo una recursion infinita
Si los pongo dentro me da error de missing storage (no reconoce los objetos de las clases incluidas)


Si alguien puede ayudarme.

Gracias y salu2

63
La taberna del BIT / Re: El Mejor Videojuego
« en: Miércoles 29 de Noviembre de 2006, 10:04 »
Citar
SENSIBLE SENSIBLE ... por dios que buen juego ... recien me baje el Sensible 2006 ... no vale nada a comparacion 

No sabia que hubieran sacado otro sensible, pero por curiosidad vi ahora una imagen y parece que es en 3D (por cierto que con unos cabezones desorbitados) asi que habra perdido toda su gracia.

Lo que me gustaba del SS es que era dificil llegar a ganar al ordenador y aunque pasaras años jugando aun te podia ganar. Ademas de la cantidad de equipos que tenia creo que de la liga italiana o inglesa llegaba a tener 4 divisiones. Tambien me gustaba que no llevabas el balon pegado a los pies como hacen muchos otros juegos de futbol , y si ibas hacia atras o de manera brusca hacia un lado te dejabas el balon. Y cuando cogia el balon un buen jugador se notaba la velocidad o que podias dar mas efecto a la pelota, se notaba mucho tambien el tiempo de partido cuando llevaban 80 min no corrian tanto , y los diferentes terrenos de juego donde corria mas o menos el balon.
Vamos que podran hacer juegos con unos graficos espectaculares, pero no creo que sean tan adictivos

64
La taberna del BIT / Re: El Mejor Videojuego
« en: Martes 28 de Noviembre de 2006, 20:38 »
A mi los juegos que hacen ultimamente no me gustan nada, graficos muy espectaculares pero han perdido toda la gracia de los juegos que hacian en los 80 y 90

Como no puedo decidirme por uno voy a decir unos cuantos de cada categoria:

Deportes: Sensible Soccer, PCFutbol cuando era de la compañia Dinamic,los Fifa hasta el 98 despues empezaron a ser todos en 3D y sin aportar ninguna mejora, los collin mcrae

Av Graficas: La abadia del Crimen, y cualquiera de Lucas Arts

Simuladores: simcity 2, wing commander 1 y 2

Estrategia: Dune2,Warcraft 1 y 2, AOE 1 y2, cualquiera de los Worms en 2d

Lucha: no me gustan

Plataformas: Gouls´n Ghosts y los Metal slug

shoot'em-up : Wolfstein 3d, Doom 2, Half life y Counter Strike


Creo que me dejo alguna categoria.. pero basicamente esos son los juegos que  mas me gustaron


Los ultimos que jugue fueron:

El padrino,GTA vice city y PES 5

65
C/C++ / Re: Debug Assertion Failed
« en: Lunes 27 de Noviembre de 2006, 15:21 »
Ok, el otro delete si lo he mantenido

Ahora si que funciona creando los objetos en la aplicacion y no en la dll.

Asi que era cosa de ese maldito delete[]  ;)  

De todas maneras conviene mantener todo en un heap?? podria dar algun problema  mas?

66
C/C++ / Re: Debug Assertion Failed
« en: Lunes 27 de Noviembre de 2006, 15:14 »
Ahora si que va, MUCHAS GRACIAS

Ya para comprenderlo del todo que diferencia hay entre

delete [] clase;

y

delete clase;

El primero borra la reserva de memoria sin llamar al destructor y el otro simplemente llama al destructor de la clase??

67
C/C++ / Re: Debug Assertion Failed
« en: Lunes 27 de Noviembre de 2006, 13:41 »
Esto es un infierno ¡¡¡ Me sigue dando el mismo error

He probado a hacer esto:

En la dll:

Código: Text
  1. SMRmodulo *SMRmodulo::CrearModulo(char *nom)
  2. {
  3.   SMRmodulo *mod=new SMRmodulo(nom);
  4.   return mod;
  5. }
  6.  

En el ejecutable:

Código: Text
  1. SMRmodulo *mod1=SMRmodulo::CrearModulo("mod1");
  2.  


Asi se supone que la reserva de memoria se hace en el heap de la dll no?

68
C/C++ / Re: Debug Assertion Failed
« en: Lunes 27 de Noviembre de 2006, 00:42 »
Gracias ¡¡


Pues maneras de hacerlo solo se me ocurre crear un metodo estatico de la clase al que se le pase el puntero y en el hacer la reserva de memoria. Mañana lo probare ....

69
C/C++ / Re: Debug Assertion Failed
« en: Domingo 26 de Noviembre de 2006, 17:08 »
He simplificado el problema lo maximo posible, dos clases: una contenedora y otra para meter en el contenedor (las dos con 1 solo atributo, el nombre)

He puesto ordenes de copia para los archivos dll y el .h en el postbuild del proyecto de la dll para que vayan a la carpeta "C:\...\Microsoft Visual Studio\MyProjects" y el archivo .lib al directorio "...\VC98\Lib"

El zip esta adjunto al mensaje.

Gracias por el interes

70
C/C++ / Re: Debug Assertion Failed
« en: Domingo 26 de Noviembre de 2006, 13:15 »
Ok gracias

Eso es lo que hice debugear y ver la linea de codigo que lanza el error, que es un delete de una reserva de memoria de un ptro a vectores que se hace en una funcion que agrega objetos modulos a un contenedor de modulos **modulosF , para vaciar lo que hay en ese contenedor y asignarle la posicion de memoria de un ptro aux donde ya se agrego el nuevo modulo

Código: Text
  1.  
  2. void SMRentorno::AgregarModulo(SMRmodulo *mod)
  3. {
  4.  
  5. SMRmodulo **aux; //contenedor aux para aumentar la dim y meter el nuevo mod
  6. int numA,num;
  7. if(mod->GetNivel()==SMR_N_MODULO) // si el modulo es del nivel que quiero
  8. {
  9. numA=this->GetNumModF(); // numA=numero de modulos sin añadir mod
  10. num=numA+1; // num= numero de modulos añadiendo mod
  11. aux=new SMRmodulo*[num]; // reserva de memoria en aux
  12. for(int i=0;i<numA;i++)  // recorro el contenedor de la clase SMRentorno
  13. {
  14.  aux[i]=new SMRmodulo(); // reserva de memoria
  15.   aux[i]=(this->modulosF)[i]; //y voy metiendo en aux su contenido
  16. }
  17. aux[numA]=new SMRmodulo(); // reserva de memoria
  18. aux[numA]=mod; // en el elemento [numA] meto el nuevo modulo
  19.  
  20.  
  21. for(int i=0;i<numA;i++) //recorro el contenedor de la clase
  22.   delete [] this->modulosF[i]; // y borro los modulos que tiene AQUI DA EL ERROR al meter el 3º modulo
  23. delete [] this->modulosF;  // y depues borro la reserva de memoria
  24.  
  25.  
  26. this->modulosF=aux; // finalmente hago que el ptro de la clase apunte al ptro aux
  27. this->SetNumModF(num); // actualizo el numero de modulos
  28. }
  29.  
  30. }
  31.  

Lo que no entiendo es por que me salta este error al introducir el tercer modulo y por que solamente me pasa cuando el enlace de la libreria es dinamico. Si fuera cosa del codigo tambien saltaria el error si estuviera la libreria estatica, no?

Quizas sea cosa de la dll?? el manejo de memoria dinamica es diferente para una dll?

71
C/C++ / Debug Assertion Failed
« en: Domingo 26 de Noviembre de 2006, 09:56 »
Hola a todos

Tengo un problema relacionado con esta pregunta que hice:

http://foros.solocodigo.com/index.php?showtopic=25725&hl=

Resulta que ahora al usar el metodo de esa libreria (dll) con el siguiente codigo de llamada

Código: Text
  1.  
  2. void main()
  3. {
  4.   SMRentorno *ent=new SMRentorno("prueba");
  5.   SMRmodulo *mod3=new SMRmodulo("NomMod1");
  6.   SMRmodulo *mod1=new SMRmodulo("NomMod2");
  7.   SMRmodulo *mod2=new SMRmodulo("NomMod3");
  8.   ent->AgregarModulo(mod1);
  9.   ent->AgregarModulo(mod2);
  10.   ent->AgregarModulo(mod3);
  11.   for(int i=0;i<ent->GetNumModF();i++)
  12.     printf("%s",ent->modulosF[i]->GetNombre());
  13. }
  14.  
  15.  

Me salta el siguiente error de ejecucion:



en el error salta cuando esta dentro de la tercera llamada a AgregarModulo, cuando va a borrar los modulos de la clase SMRentorno para luego copiarle el ptro aux con el modulo mod3 añadido

Lo raro es que esto solo sucede cuando se trata de la libreria enlazada dinamicamente, si lo hago estaticamente no sucede ningun error

Alguien tiene idea de lo que puede suceder ???

Gracias

PD: el codigo del metodo AgregarModulo esta aqui

http://foros.solocodigo.com/index.php?showtopic=25725&hl=

72
C/C++ / Re: Problemas Con Borrado
« en: Sábado 25 de Noviembre de 2006, 13:17 »
Bueno ya di con lo que fallaba (tanto tiempo sin usar los punteros es lo que tiene ... :D )

El fallo esta aqui

aux=(this->modulosF);

estoy copiando los punteros y no el contenido por lo que al borrar this->modulosF aux se queda apuntando a una zona de memoria que no tiene nada

Lo correcto seria:

*aux=*(this->modulosF);

Por cierto, una curiosidad que tengo, hay alguna forma de incrementar el espacio de memoria al que apunta un ptro. Lo digo para no tener que hacer una copia de lo que apuntaba ........

salu2 y gracias

73
C/C++ / Problemas Con Borrado
« en: Sábado 25 de Noviembre de 2006, 12:06 »
Hola a todos

Estoy intentando hacer un contenedor de objetos de una clase (SMRmodulo) en otra clase (SMRentorno). En la clase SMRentorno tengo un atributo SMRmodulo **modulosF;  y un metodo para agregar modulos al vector (AgregarModulo) que tiene la siguiente definicion:

Código: Text
  1.  
  2.  
  3. void SMRentorno::AgregarModulo(SMRmodulo *mod)
  4. {
  5.  
  6. SMRmodulo **aux; //contenedor aux para aumentar la dim y meter el nuevo mod
  7. int numA,num;
  8. if(mod->GetNivel()==SMR_N_MODULO) // si el modulo es del nivel que quiero
  9. {
  10. numA=this->GetNumModF(); // numA=numero de modulos sin añadir mod
  11. num=numA+1; // num= numero de modulos añadiendo mod
  12. aux=new SMRmodulo*[num]; // reserva de memoria en aux
  13. for(int i=0;i<numA;i++)  // recorro el contenedor de la clase SMRentorno
  14. {
  15.   aux[i]=new SMRmodulo(); // reserva de memoria
  16.   aux[i]=(this->modulosF)[i]; //y voy metiendo en aux su contenido
  17. }
  18. aux[numA]=new SMRmodulo(); // reserva de memoria
  19. aux[numA]=mod; // en el elemento [numA] meto el nuevo modulo
  20.  
  21. //*********** AQUI ES DONDE ESTA EL PROBLEMA **********  
  22. for(int i=0;i<numA;i++) //recorro el contenedor de la clase
  23.   delete [] this->modulosF[i]; // y borro los modulos que tiene
  24. delete [] this->modulosF;  // y depues borro la reserva de memoria
  25. //****************************************************
  26.  
  27. this->modulosF=aux; // finalmente hago que el ptro de la clase apunte al ptro aux
  28. this->SetNumModF(num); // actualizo el numero de modulos
  29. }
  30.  
  31. }
  32.  
  33.  
  34.  

El problema es que al intentar meter varios modulos y recorrerlos para ver si se han agregado bien, lo que obtengo es basura.

Si no hago el borrado funciona bien, pero claro voy dejando una copia de todos los modulos en memoria

Si alguien puede echarme una mano le estare agradecido

Salu2

74
La taberna del BIT / Re: El Globo, El Ingeniero Y El Jefe
« en: Viernes 3 de Noviembre de 2006, 17:44 »
Esta bueno el chiste   :D

Citar
Pero se ha dicho que que lleva media hora de retraso , por lo cual deducimos que si aplican las leyes de la fisica de la continuidad de espacio-tiempo, existiendo esta entonces yo deduzco que aplican las demas leyes fisicas y que se encuentra en un planeta cercano a este y con un alto grado de probabilidad de que sea la tierra debido a que el sistema metrico es identico al de aqui (metros, latitud, grados) .

Ese es otro chiste Bicholey ???  :D

Nada tiene que ver las unidades de medicion del tiempo o del espacio, con las leyes de la fisica.Son solamente una invencion humana que puedes usar tanto en el planeta tierra como en otros planetas

75
C/C++ / Re: Enlazando Explicitamente Una Dll
« en: Martes 17 de Octubre de 2006, 00:16 »
Hola de nuevo.

He estado mirando ese link , y la verdad, no me parece muy buena solucion ya que hay que tener un typedef de un puntero a cada funcion (metodo) de las clases ( vamos que es un engorro).

He estado curioseando un poco mas y parece que ademas que ese metodo se basa en algo parecido a lo que hacen los objetos COM. Si no me equivoco son como una interface a dlls o exes para poder acceder a sus funciones. Pero todavia no tengo nada claro que son, ni para que se utilizan. ¿Podrian valer para lo mismo que una dll y poder cargar las clases dicamicamente?

Bueno espero no haber dicho muchas burradas, aunque quizas sea lo que este buscando ...

salu2  :hola:

Páginas: 1 2 [3] 4 5 ... 30