|
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
« en: Martes 12 de Diciembre de 2006, 16:25 »
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 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 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
« 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
« en: Martes 12 de Diciembre de 2006, 16:08 »
Este es el codigo de Insertar en la plantilla void Insertar(T *nodo) { if(nodo!=NULL) { lista *p1,*p2; p1=list; if(p1==NULL) { p1=new lista(); if(p1!=NULL) { p1->act=nodo; p1->next=NULL; list=p1; } } else { while(p1->next!=NULL) p1=p1->next; p2=new lista(); if(p2!=NULL) { p2->act=nodo; p2->next=NULL; p1->next=p2; } } } else { //PORHACER error nodo nulo printf("esta introduciendo un nodo NULO"); } };
54
« en: Martes 12 de Diciembre de 2006, 16:06 »
Lo quiero hacer para esto SMRentorno *ent1=new SMRentorno("ent1"); // un objeto SMRentorno *ent2=new SMRentorno("ent2"); // otro delete ent2; // destruyo el ultimo SMRlista<SMRentorno> list; // lista enlazada list.Insertar(ent1); // inserto el primero list.Insertar(ent2); // inserto el segundo (se me cuela pq no se como ver si esta destruido) list.Vaciar(); // al vaciar la lista e ir destruyendo da un error de ejecucion al colarse un ptro a una zona vacia
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
« en: Martes 12 de Diciembre de 2006, 15:33 »
Si, lo que probe fue esto: void SMRentorno::operator delete( void *p ) { free(p); p=NULL; }
pero no me cambia el ptro a NULL
56
« 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: objeto *obj1=new objeto(); delete obj1; // Aqui el puntero se queda apuntado a algo que no es NULL if(obj1==NULL)printf("es null"); // y aqui no me caza los NULL
He probado en el destructor pero no se muy bien como hacerlo Gracias y salu2
57
« 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
« 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
« 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
« en: Sábado 2 de Diciembre de 2006, 11:31 »
Al final hice eso que comentas, gracias
61
« en: Jueves 30 de Noviembre de 2006, 10:35 »
Pues son estas 2 clases: extern "C" class PROYECTOSMR_API SMRcuaternio { private: float valores[4]; public: //Constructores SMRcuaternio(); SMRcuaternio(float c0,float c1,float c2,float c3); SMRcuaternio(float ang,SMRvector eje); SMRcuaternio(SMRpunto3D euler); //Sobrecarga de Operadores bool operator==(const SMRcuaternio& c); float& operator [](int i); SMRcuaternio operator+(const SMRcuaternio& c); SMRcuaternio operator-(const SMRcuaternio& c); SMRcuaternio operator*(const SMRcuaternio& c); SMRcuaternio operator*(float escalar); SMRcuaternio& operator = (const SMRcuaternio& c); //Otros Metodos SMRcuaternio GetConjugado(); float *GetValQ(){return this->valores;} };
extern "C" class PROYECTOSMR_API SMRpunto3D { private: float valores[3]; public: SMRpunto3D(); SMRpunto3D(float v1,float v2,float v3); SMRpunto3D operator-(const SMRpunto3D& p); int operator*(const SMRpunto3D& p); // prod escalar SMRpunto3D operator*(float escalar); SMRpunto3D operator& (const SMRpunto3D &p); // prod mixto SMRpunto3D& operator = (const SMRpunto3D& p); float& operator [](int i); float *GetVector(){return this->valores;} SMRpunto3D GiraByCuaternio(SMRcuaternio c); float GetNorma(); friend ostream& operator<<(ostream&, const SMRpunto3D&); };
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
« 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 #include "A.h" #ifndef _B_H_ #define _B_H_ class B { private: A objA; public: B(); virtual ~B(); }; #endif
#include "B.h" #ifndef _A_H_ #define _A_H_ class A { private: B objB; public: A(); virtual ~A(); }; #endif
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
« en: Miércoles 29 de Noviembre de 2006, 10:04 »
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
« 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
« 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
« 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
« 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: SMRmodulo *SMRmodulo::CrearModulo(char *nom) { SMRmodulo *mod=new SMRmodulo(nom); return mod; }
En el ejecutable: SMRmodulo *mod1=SMRmodulo::CrearModulo("mod1");
Asi se supone que la reserva de memoria se hace en el heap de la dll no?
68
« 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
« 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
« 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 void SMRentorno::AgregarModulo(SMRmodulo *mod) { SMRmodulo **aux; //contenedor aux para aumentar la dim y meter el nuevo mod int numA,num; if(mod->GetNivel()==SMR_N_MODULO) // si el modulo es del nivel que quiero { numA=this->GetNumModF(); // numA=numero de modulos sin añadir mod num=numA+1; // num= numero de modulos añadiendo mod aux=new SMRmodulo*[num]; // reserva de memoria en aux for(int i=0;i<numA;i++) // recorro el contenedor de la clase SMRentorno { aux[i]=new SMRmodulo(); // reserva de memoria aux[i]=(this->modulosF)[i]; //y voy metiendo en aux su contenido } aux[numA]=new SMRmodulo(); // reserva de memoria aux[numA]=mod; // en el elemento [numA] meto el nuevo modulo for(int i=0;i<numA;i++) //recorro el contenedor de la clase delete [] this->modulosF[i]; // y borro los modulos que tiene AQUI DA EL ERROR al meter el 3º modulo delete [] this->modulosF; // y depues borro la reserva de memoria this->modulosF=aux; // finalmente hago que el ptro de la clase apunte al ptro aux this->SetNumModF(num); // actualizo el numero de modulos } }
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
« 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 void main() { SMRentorno *ent=new SMRentorno("prueba"); SMRmodulo *mod3=new SMRmodulo("NomMod1"); SMRmodulo *mod1=new SMRmodulo("NomMod2"); SMRmodulo *mod2=new SMRmodulo("NomMod3"); ent->AgregarModulo(mod1); ent->AgregarModulo(mod2); ent->AgregarModulo(mod3); for(int i=0;i<ent->GetNumModF();i++) printf("%s",ent->modulosF[i]->GetNombre()); }
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
« 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 ...  ) 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
« 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: void SMRentorno::AgregarModulo(SMRmodulo *mod) { SMRmodulo **aux; //contenedor aux para aumentar la dim y meter el nuevo mod int numA,num; if(mod->GetNivel()==SMR_N_MODULO) // si el modulo es del nivel que quiero { numA=this->GetNumModF(); // numA=numero de modulos sin añadir mod num=numA+1; // num= numero de modulos añadiendo mod aux=new SMRmodulo*[num]; // reserva de memoria en aux for(int i=0;i<numA;i++) // recorro el contenedor de la clase SMRentorno { aux[i]=new SMRmodulo(); // reserva de memoria aux[i]=(this->modulosF)[i]; //y voy metiendo en aux su contenido } aux[numA]=new SMRmodulo(); // reserva de memoria aux[numA]=mod; // en el elemento [numA] meto el nuevo modulo //*********** AQUI ES DONDE ESTA EL PROBLEMA ********** for(int i=0;i<numA;i++) //recorro el contenedor de la clase delete [] this->modulosF[i]; // y borro los modulos que tiene delete [] this->modulosF; // y depues borro la reserva de memoria //**************************************************** this->modulosF=aux; // finalmente hago que el ptro de la clase apunte al ptro aux this->SetNumModF(num); // actualizo el numero de modulos } }
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
« en: Viernes 3 de Noviembre de 2006, 17:44 »
Esta bueno el chiste 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 ??? 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
« 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
Páginas: 1 2 [3] 4 5 ... 30
|
|
|