|
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 - r0d
1
« en: Miércoles 15 de Septiembre de 2010, 00:11 »
A ver. ¿Puedes enseñarnos el fichero "ventanas.h"?
2
« en: Jueves 22 de Julio de 2010, 23:02 »
o aun: *lista2 = *lista1; pero ¿porque utilizar tus listas como punteros, que te complicas la vida? Osea, en vez de linkedlist* lista1 = NULL; linkedlist* lista2 = NULL; lista2 = lista1;
porque no hacer: linkedlist lista1; linkedlist lista2; lista2 = lista1;
3
« en: Miércoles 21 de Julio de 2010, 19:03 »
Hola, lo que pasa, es que hay que ver un puntero como un objeto en si mismo. Es un objeto que contiene la dirección de otro objeto. Entonces, si tienes un puntero en variable miembra de tu clase, el destructor estara llamado, pero solo el puntero estara destruido, y no el objeto apuntado por el puntero. Para destruir el objeto apuntado por el puntero, hay que llamar al operador delete (que no es un destructor, sino un operador que llama al destructor del objeto apuntado, no es lo mismo). Entonces, si tienes un puntero en variable miembra, hay que llamar al delete dentro de tu destructor, sino el objeto dicho no es destruido. Espero que me explico. Que ocurre si en el destructor pongo las variables miembro a su valor por defecto entonces ? ( por ejemplo pongo un entero a 0 o a NULL) Perdon pero no entiendo esta pregunta
4
« en: Miércoles 7 de Julio de 2010, 03:22 »
hola,
una función no puede ser amigo (friend) de nadie. Solo las clases pueden ser amigas, una de otra (si Clase1 es amiga que Clase2, no significa que Clase2 es amiga de Clase1).
5
« en: Miércoles 7 de Julio de 2010, 03:14 »
Hola, primero, si el original.fail() devuelve true, no significa que haya un problema. Esto significa que alguno de los dos bits de control (failbit or badbit) esta puesto a true. En nuestro caso, es el failbit que se pone a true cuando, el en bucle anterior, intentas hacer un getline() y que este getline() falla. Para ser preciso, es cuando el getline falla que el failbit y el eofbit se ponen a true (por eso el original.eof() devuelve true despues, y se sale del bucle). segundo, no solemos trabajar asi con los fstreams. En ves de lo que haces, oesa el siguiente: ifstream original; ofstream nuevo; string s; //string auxiliar original.open("original.txt"); bool b = original.good(); // da true nuevo.open("nuevo.txt"); b = nuevo.good(); // da true
solemos hacer asi: ifstream original( "original.txt" ); if ( !original ) // ver nota [1] return error; ofstream nuevo( "nuevo.txt" ); if ( !nuevo ) // ver nota [2] return error_critical_hd; // y ya esta: si llegamos aqui es que todo esta bien
tercero: la segunda parte de tu códido (todo lo que hay despues del bucle), no hace nada y/o no sirve para nada. Salvo el nuevo.good() que efectivamente te dice si todo esta bien con tu nuevo fichero, pero si algo pasa mal en el bucle tal como esta, este programa peta antes de llegar al nuevo.good() ese. Vamos a ver. Despues del bucle, haces un original.close(). Vale, esto cierre el aceso al fichero. Pero la variable original (de tipo ifstream) sigue en la pila (stack). Y la posicion de su cursor no ha cambiado. Asi que cuando lo vuelves a abrir, su cursor sigue estando posicionado al final, y ademas con el failbit a true. Si quieres reutilizar la misma variable para seguir manipulando el mismo fichero, tienes que reposicionar el cursor, utilizando la función seekg(). Espero que ayuda. Saludos. notas: [1] la explicacion de esto es un poco complicado, porque lo que hace el compilador aqui es un cast del ifstream en void* para aplicar el operator void*( ) const; (este operador hace poco más que una llamada a la funcion fail()) de la clase ifstream, pero es la mejor manera de hacer porque entre otros es thread safe. [2] misma historia. Esta manera de hacer tambien tiene la ventaja que esto falla solo cuando es impossible crear cualquier tipo de fichero, es decir cuando hay un problema gordo con el disco duro.
6
« en: Miércoles 21 de Octubre de 2009, 19:53 »
o utilisar la classe standard string en vez de char*
7
« en: Miércoles 21 de Octubre de 2009, 14:05 »
Gracias No sabia todo esto. Siempre he pensado que, en general (no siempre), el c++ esta mas lento que el c.
8
« en: Miércoles 21 de Octubre de 2009, 14:03 »
lo siento, no entiendo tu pregunta
9
« en: Miércoles 21 de Octubre de 2009, 12:59 »
Sin ir mas lejos la amplisima mayoria de los Kernels, de los S.O. modernos, como Windows o Linux, y sus drivers estan escritos en C, son de una gran complejidad y pueden ser escritos en C++ tambien. No sé... creo que no estaria un buena idea de hacer un kernel de un s.o. en c++. O habra que hacer tantas partes en C o assemblador que al final no quedara mucho c++. El c++ tiene una capa mas que el c, y para cosas que tienen que ser muy muy rapidas, y dependiente de la architectura (procesador, hw en general) el c es mejor. Mira, cuando hablaba de videojuegos, hay partes que son hechos en C (o en scripts como dices), las partes mas "criticas" digamos, pero en forma de libreria independientes.
10
« en: Miércoles 21 de Octubre de 2009, 12:52 »
Hola, &po->nos indica la direccion de memoria del objeto, no? Eso es. Eso se llama un parametro por referencia. Para empezar, puedes considerar que es igual que un puntero (pero veras que no es exactamente igual). si yo tengo un metodo declarado en la parte publica que se llama EsVacio, que devuelve un bool si el objeto está vacio, me pueden decir porque me da error esto? y sobre todo como lo tengo que expresar, pero no decirme la solucion y ya está..sino que quiero entender el porqué... Tienes que hacer el metodo const: bool TPoro::EsVacio() const { //... }
Esta palabra clave const, aplicada a un metodo, significa que este metodo puede ser llamado a partir de un objeto constante. Y mira en tu operador, el objeto de tipo TPoro es pasado por referencia constante, asi que podras solo llamar a sus metodos constantes. Hoep it helps.
11
« en: Miércoles 21 de Octubre de 2009, 12:40 »
El punto 4 no se como lo podes justificar. Por ejemplo, si tengo que hacer un pequeño progama que verifica, cada x secundos, si hay un fichero en una carpeta dada, y si hay un fichero, hace un par de copias de este fichero en otras carpetas, lo voy a hacer en C. Un main() de 20 lineas y basta. Para hacer un videojuego de tipo word of warcraft, es impensable hacerlo en C. Y PHP es un lenguaje interpretado ... Si vale, pero digo en la manera de programar. De vez en cuando, tengo que hacer un poco de php, y me da igual que sea interpretado o compilado. Lo que veo es que el codigo resultante es muy parecido al C. Es en este sentido que hablaba.
12
« en: Miércoles 21 de Octubre de 2009, 12:35 »
veo que lo que me mandas es en C El codigo que te he dado es C++ ( parametros de funccion por referencia, uso de iteradores, uso de flujos...), y no compilarà con un compilador C.
13
« en: Miércoles 21 de Octubre de 2009, 12:31 »
C++ es una extensión de C, así que C funciona perfectamente con compiladores de C++. Es verdad que soy un poco extremista en ese tema, pero: 1. al principio, efectivamente, era una extension, pero han seguidos dos caminos muy distintos y ahora son dos idiomas totalmente diferentes 2. hay muchas cosas que compilan en C pero no en C++ (void*, goto, etc...), y viceversa 3. los paradigmos son diferentes en C y en C++, así que la fase de concepcion (diseño) no hay nada que ver. 4. el C y el C++ no van a ser utilizados para resolver los mismos problemas. Queda una parte comùn, pero esta parte comun es cada vez mas pequeña. Y por todas estas razones, es claro que hay que entender - el mas temprano posible en el proceso de aprendizaje - que son dos lenguajes distintos. Porque desde que tengo pragramadores a cargo, esta confusión me lleva muchos problemas. Pero muchos. Y ademas, si alguine no tiene claro estas diferencias, como va podrà entender bien conceptos como templates, NVI, RAII, LSP, herencia intrusiva, const correctness, ..., conceptos fundamentales para programar bien en C++, pero que no tienen sentido en C. En serio, el C es mucho mas parecido al PHP que al C++. Son realmente dos lenguajes distintos (con una parte comun, pero cada vez mas pequeña).
14
« en: Martes 20 de Octubre de 2009, 08:46 »
hola, estas haciendo una mescla de C y C++ que no es muy bueno... por ejemplo, el primero problema, en C++, se tiene que escribir asi: #include <iostream> #include <sstream> #include <string> using namespace std; string encripta( const string & p ) { stringstream strRet; string::const_iterator it1 = p.begin(); string::const_iterator it2 = ++it1; int count = 1; do { if ( *it1 == *it2 ) count++; else { strRet << count << *it1; it1 = it2; count = 1; } ++it2; } while ( it2 != p.end() ) ; strRet << count << *it1; return strRet.str(); } int main() { string strIn; cout << "Ingrese una cadena: "; cin >> strIn; string strOut = encripta( strIn ); cout << "La cadena enriptada es: "<< strOut << endl; cin.get(); cin.get(); return 0; }
15
« en: Lunes 19 de Octubre de 2009, 14:29 »
Hay varios soluciones. Por ejemplo, puedes utilizar la SDL, pero solo su parte "event management", para recibir los eventos del teclado y del raton. O sino, una libreria mas c++ (oo): la SFML
16
« en: Lunes 19 de Octubre de 2009, 14:26 »
Una solucion portable y que estara incluida probablemente en el proximo estandar c++1x: boost::filesystem
17
« en: Martes 13 de Octubre de 2009, 21:56 »
Hola,
Tienes que hacerlo en C o en C++?
18
« en: Martes 13 de Octubre de 2009, 20:06 »
Vale, pues es lo que dicia desde el principio: el problema es en el operador -, no en la funccion pP. Solo hay tres posibilidades: 1. declarar la variable miembra integer como mutable, pero eso es mas feo que la hostia. 2. hacer una copia de integer en una variable temporal para enviar a pP() 3. salir el operador - de la clase, como he propuesto en mi secundo mensage. Esto es, de largo, la mejor solucion.
19
« en: Martes 13 de Octubre de 2009, 18:14 »
Hola, Supongo que la clase KeypointIter sobrecarga el operador de dereferenciación. Tiene que tener esta pinta: // eso es el operador de dereferenciación, y para que functione con el // codigo que nos has enseñado, tiene que devolver un Keypoint* : Keypoint* operator&(Integer& a);
Si quieres enteder bien lo que pasa, fijate el codigo siguiente, y ejecutalo con puntos de parada para ver lo que pasa: struct Dum { Dum( int n = 0 ) : num(n) {} int num; }; Dum* operator * ( Dum & dum ) { return &dum; } int main() { Dum dum(10); Dum* pd = (*dum); //... }
20
« en: Martes 13 de Octubre de 2009, 10:20 »
Ok ok, me equivoque. Pero hay algo que no entiendo, es la funcion pP: void HugeInt::pP( short arr[], const int pos ) //pP (pedirPrestado), deberia ser const { for( int i = pos - 1; i >= 0; i-- )//for1 { if( arr[ i ] > 0 ) { --arr[ i ]; while( arr[ ++i ] == 0 && ( i != pos ) ) arr[ i ] = 9; arr[ pos ] += 10; break; } } }// end pP (pedirPrestado) function
Me dices que: pP modifica arr asi que no puede ser const, HugeInt operator-( const HugeInt & ) llama a pP asi que HugeInt operator-( const HugeInt & ) no puede ser const, ahorita tratare de hayar una solucion sin modificar valores que tengo masomenos la idea. pP modificar arr, es verdad, pero arr es pasado por parametro, no es miembro de HugeInt. Entonces no entiendo porque pP no puede ser const.
21
« en: Martes 13 de Octubre de 2009, 00:36 »
Ha vale, ahora entiendo. El problema es la variable integer, que es miembro de HugeInt, y que quieres modificar en el operator - Lo que tienes que hacer entonces, es salir el operador - de la classe. En vez de: class MiClase { HugeInt HugeInt::operator-( const HugeInt &op2 ) const; //... };
algo asi: class MiClase { // a veces ayuda declarar el operador como amigo: // friend MiClase operator - ( const MiClase &, const MiClase & ); // ... codigo de MiClase }; MiClase operator - ( const MiClase & left, const MiClase & right ) { MiClase resultado; // creación de una nueva instancia de MiClase // codigo return resultado; }
22
« en: Lunes 12 de Octubre de 2009, 15:11 »
Hola, creo que el problema puede estar en esta linea: CGeneralLogger glogger = CGeneralLogger("Log333.txt",tools::GLog::LOGLEVEL_DEGUG);
Porque creo que lo que hace este codigo es: 1. crea una instancia glogger de CGeneralLogger con el constructor por defecto 2. crea un objeto temporal con los parametros dados 3. llama el operador de afectación 4. destruye el objeto temporal Es un tema complicado, porque lo que pasa exactamente puede cambiar segun el compilador y sobre todo las opciones de compilación. De todas formas, es mejor hacer lo siguiente: CGeneralLogger glogger("Log333.txt",tools::GLog::LOGLEVEL_DEGUG);
Pero no entiendo: ¿usas CGeneralLogger en forma de Singleton? es lo que me parece porque usas la funcion GetInstance() Me parece raro porque: 1. Si CGeneralLogger es un singleton, no hay que instanciarlo fuera de su-mismo (es por eso que los constructores son declarados en privado en el pattern Singleton) 2. CGeneralLogger parece dedicada a tener herencia (hablas de la funcion virtual processMessage, supongo que es un patrono Template Method y que tendras hijos de CGeneralLogger que implementan processMessage de maneras distintas ¿no?)
23
« en: Lunes 12 de Octubre de 2009, 14:51 »
Hola, no se si he entendido bien, pero me parece que solo tienes que poner la función pP en const: void HugeInt::pP( short arr[], const int pos ) const
De lo que veo, pP no modifica nigun dato de la clase HugeInt ¿no?
24
« en: Jueves 8 de Octubre de 2009, 10:22 »
Vale. Te preguntaba esto porque estoy eprogramando un juego que tiene algunas carateristicas de lo que me dices. Yo, uso una libreria que se llama SFML. Alegro parece muy bien (acabo de hechar un ojo), pero no conozco. El mejor que puedes hacer, es descargar las fuentes (con svn) de mi juego y hechar un vistazo. El deposito svn es: https://yatus.svn.sourceforge.net/svnroot/yatusY la página web dedicada: http : // r0d.developpez.com/yatus/dev-es.html (quita los espacios) No es exactamente igual que lo que quieres hacer, pero ya puedes coger ideas y tal.
25
« en: Miércoles 7 de Octubre de 2009, 22:23 »
code::blocks es un EDI muy bueno ¿que tipo de juego quieres hacer? osea ¿Cuanto tiempo tienes? ¿cuantas personas (desarrolladores, grafistas...)?
|
|
|