|
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 - Geo
Páginas: 1 [2] 3 4 ... 41
26
« en: Lunes 24 de Enero de 2011, 17:30 »
1-Se hacen asi opr cuestion de rendimiento (y supongo yo de mayor entendimiento)
Que no sean funciones miembro es por cuestión de claridad o como mencionas, de "entendimiento": para que puedan usarse con lo que estamos habituados, a poner el cout o el cin del lado izquierdo . Que sean funciones friend es por cuestión de rendimiento, para no "perder tiempo" en acceder a las variables privadas de la clase mediante funciones getVarible/obtenerVariable. Si estas cosas me las hubiesen explicado con anterioridad hubiese sido todo mucho mas facil Recuerda, el autoaprendizaje es de las herramientas más valiosas en cualquier actividad, la escuela sirve para dar formalidad y buenas prácticas .
27
« en: Lunes 24 de Enero de 2011, 17:24 »
De nada, ojalá luego puedas contarnos de tus proyectos con Allegro .
28
« en: Lunes 24 de Enero de 2011, 06:47 »
¿Y si separas en varios archivos por secciones? ¿No has planteado la posibilidad de usar una base de datos, p. ej. SQLite?
29
« en: Lunes 24 de Enero de 2011, 06:39 »
Estas dudas se resuelven en un buen libro de C++ . - Los operadores << y >> puedes sobrecargarlos como desees, tanto como funciones miembro como funciones globales que pueden declararse como amigas. Pero, para el caso del ejemplo que pones, en el que se trata de enviar datos a un ostream, si se sobrecargara el operador como función miembro, el primer operando debería ser un objeto o referencia a la clase de la cual es miembro el operador, y tendrías que escribir algo como esto:
en lugar del habitual: Para poder escribir el segundo código (lo más "habitual" en C++), se usa una función no miembro porque el objeto no es el operando "más a la izquierda". Por otro lado, el ejemplo que pones de sobrecarga del operador << es incorrecto porque el parámetro debería ser un tipo ostream. Por último, estas funciones se hacen amigas por cuestión de rendimiento, es más rápido que puedan acceder de manera directa a las variables miembro de la clase que utilizar las funciones de acceso de dicha clase. - El operador = es binario, es decir, recibe dos operandos, por lo que para la operación
objeto1 = objeto2 = objeto3 el compilador ve esto: objeto1 = ( objeto2 = objeto3 ) Si el operador = devolviera void la última operación resultaría en objeto1 = void. - Misma razón que el punto anterior, para que puedas "encadenar" instrucciones.
- Es difícil adivinar. No sabemos si cadena contiene algo o no, si el problema es el operador + que no devuelve lo adecuado...
30
« en: Lunes 24 de Enero de 2011, 05:31 »
¿Tu aplicación no requiere de una GUI? Si piensas agregarle una GUI, la biblioteca que uses tendrá lo necesario para mostrar el diálogo que quieres, ya sea GTK, Qt, WxWidgets, etc. Si estás creando un script, checa Zenity
31
« en: Lunes 24 de Enero de 2011, 05:12 »
Allegro no soporta fuentes Truetype por defecto, para poder usarlas necesitas alguna biblioteca adiciona, como AllegroFont o AllegTTF. Si usas Dev-C++, en devpaks.org está disponible un paquete de AllegroFont.
Sobre la necesidad de incluir la fuente Arial en tu proyecto, el único detalle es que debes conocer el directorio en el que se encuentra el archivo de la fuente, porque debes usarlo como parámetro para la función que cargará la fuente. En Windows las fuentes normalmente se instalan en c:WindowsFonts, y si, la fuente Arial viene instalada por defecto en Windows por lo que, en teoría, todos deberían tenerla.
32
« en: Lunes 24 de Enero de 2011, 03:22 »
Suerte con ello . Por otro lado, ¿estás usando Borland por tu propia cuenta o porque lo usan en la escuela? Porque te recomiendo que le eches un ojo a la versión gratuita de Visual C++: Visual C++ 2010 Express, solo puedo decirte que es un entorno excelente .
33
« en: Domingo 23 de Enero de 2011, 23:45 »
El problema está con el enlazador, ya que no encuentra el código objeto de las funciones matemáticas que definiste en el otro archivo. No uso el entorno Borland y por tanto desconozco el manejo que haga, pero en la gran mayoría de entornos, para poder manejar programas de varios archivos necesitas crear un "proyecto", e ir agregando el código fuente a dicho proyecto, de manera que el entorno pueda distinguir cuál es el archivo principal (donde se encuentra la función main) y después pueda ejecutar los comandos de compilación y enlazado de manera correcta. Busca en el entorno que usas donde tenga las opciones de proyecto y revisa los parámetros del enlazador, en si, lo que se debería hacer es crear un archivo objeto para cada archivo fuente, por ejemplo, si tus archivos fueran principal.c, funciones.c y funciones.h, la compilación debería generar archivos objeto para principal.c y funciones.c, generalmente principal.obj y funciones.obj, los cuales al final se pasarían como parámetros al enlazador para crear el ejecutable. En tu caso está ocurriendo que no se tiene el código de las funciones matemáticas.
Pasos para generar un ejecutable a partir de archivos principal.c, funciones.c y funciones.h:
compilar principal.c y generar principal.obj compilar funciones.c y generar funciones.obj enlazar y generar el ejecutable usando los archivos de código objeto principal.obj y funciones.obj
34
« en: Sábado 22 de Enero de 2011, 16:29 »
Para que sea más fácil ayudarte debes dar más información ¿qué error te arroja? ¿error al compilar o al enlazar? qué compilador/IDE usas o compilas por línea de comandos?
El error que veo está en el código principal: no defines la variable flag_error antes de pasarla como parámetro a la función Dividir.
35
« en: Jueves 20 de Enero de 2011, 17:32 »
Revisa la sintaxis de la función fwrite: fwrite( puntero_array , tamaño_en_bytes_de_cada_elemento , numero_de_elementos , puntero_FILE );
Una variable tipo int no ocupa un solo byte en memoria, su tamaño depende de la plataforma en que trabajes, si es un sistema de 32 bits probablemente ocupe 4 bytes. En fin, que para escribir ff en tu archivo debes cambiar: por O mejor aún, si no sabes cuántos bytes ocupa un tipo int usa sizeof: fwrite( var , sizeof( int ), 2, fs );
36
« en: Jueves 20 de Enero de 2011, 00:31 »
Mmm, eso te toca a ti :p. En un vistazo rápido encontré la clase String, que supongo es la que se ha de usar para los textos de los componentes. El problema es que la documentación no muestra ningún constructor ni inicializador de esta clase , ¿cómo voy a saber a partir de qué puedo crearla? Tampoco se ve que tenga una función format como la clase CString de MFC. En fin, imagino que se podrá usar una cadena "al estilo C" para inicializar, entonces, puedes convertir el valor DWORD a un array de char usando sprintf, después lo usas para inicializar tu variable String que le pasarás al diálogo, algo como esto: DWORD dwVersion = MPUSBGetDLLVersion(); char sVersion[ 16 ]; sprintf( sVersion , "%lu", dwVersion ); String strVersion( sVersion );
Nota: no estoy en Windows ni tengo la intención de instalar RadC++, así que no se si ese código funcione, pero al menos debe darte una idea . Suerte.
37
« en: Miércoles 19 de Enero de 2011, 20:07 »
No me refiero al tipo que devuelve MPUSBGetDLLVersion, que ya te mencioné es DWORD, sino la que tú tienes que pasarle al diálogo con el texto a mostrar. Repito, no he usado RadC++ y por eso desconozco si usa tipos de la WINAPI o de alguna biblioteca de Windows (MFC).
Te puse un ejemplo para convertir un DWORD a CString, para el caso que dicho diálogo acepte un tipo CString.
38
« en: Miércoles 19 de Enero de 2011, 18:00 »
¿Qué tipo de variable es la que pasas para mostrar el texto? A eso me refiero. ¿Un std::string, un char*, CString, LPCTSTR? Dependiendo del tipo de variable, será el modo de convertirla . Por ejemplo, usando CString, sería algo como esto: DWORD version = 1000; CString str; str.Format( "%lu", version );
39
« en: Miércoles 19 de Enero de 2011, 17:30 »
Depende de qué tipo de variable te devuelve y el tipo necesario para colocar el texto en el control. Si la función a la que te refieres es esta: DWORD MPUSBGetDLLVersion( void );
Te indica que el número de versión lo devuelve como un tipo DWORD, que no es otra cosa más que un entero de 32 bits. Ahora, desconozco los tipos que el control "dialogo" de RadC++ (a biblioteca que mencionas) utilice para su propiedad texto (o caption, no se), pero debes realizar la conversión para poder asignar el valor al control. Si te complicas con la conversión, coméntalo aquí para que te echemos la mano (menciona el tipo de variable que necesita el control).
40
« en: Miércoles 19 de Enero de 2011, 17:17 »
En lenguaje C, una cadena es un array de tipo char. Por lo tanto, un array de cadenas es un array de arrays de tipo char, lo que es lo mismo, un array bidimensional (o una matriz) de tipo char. Espero que el ejemplo te sirva: #include <stdio.h> #include <stdlib.h> int main() { // Array de 10 cadenas de 63 caracteres // (el último se usa para la marca de terminación de cadena) char array_de_cadenas[ 10 ][ 64 ]; int i; // Ingresa datos a las cadenas for ( i = 0; i < 10; i++ ) { sprintf( array_de_cadenas [ i ], "Soy la cadena número %d", i ); } // Muestra el contenido de las cadenas for ( i = 0; i < 10; i++ ) { printf( "Contenido de la cadena %d: %sn", i , array_de_cadenas [ i ]); } return 0; }
También es posible declarar un array de diez cadenas de esta forma: // También puede declararse así: char *array_alternativo[ 10 ]; // Hay que reservar memoria para el número de caracteres de cada cadena.
Pero en este caso tú debes encargarte de la reserva de memoria para cada cadena (el número de caracteres que podrá almacenar) antes de poder ingresarle datos, checa el ejemplo de m0skit0 .
41
« en: Miércoles 19 de Enero de 2011, 07:56 »
También puedes usar sprintf: char array[ 4 ] = "000"; char archivo[ 16 ]; sprintf( archivo , "R%s.txt", array ); printf( "Archivo a abrir: %sn", archivo );
42
« en: Miércoles 19 de Enero de 2011, 07:36 »
¿Lenguaje C o C++? Es decir, ¿un array de cadenas al estilo C o uno del tipo estándar string de C++?
43
« en: Miércoles 19 de Enero de 2011, 07:15 »
Yo ya he usado la mpusbapi.dll en varios lenguajes, pero para que aquí se te ayude hace falta más información .
44
« en: Martes 18 de Enero de 2011, 22:55 »
Gracias por la respuesta, y si a ambas preguntas, ya incluí la instrucción using y también agregué la referencia a System.Speech. El programa se genera sin problemas, el detalle está al momento de querer utilizar las propiedades o métodos de speaker. Incluso descargué un código de ejemplo de un artículo que usa el framework .net 4, y me ocurre el mismo detalle, estoy más por el lado de que hay algún problema en mi instalación, porque de plano no doy . ¿Saben de algún requerimiento en específico para poder utilizar System.Speech.Synthesis?
45
« en: Martes 18 de Enero de 2011, 07:28 »
Qué tal, acabo de instalar Visual Studio 2010 y estoy intentando ejecutar un ejemplo de síntesis de voz, hago lo siguiente: 1. Creo un nuevo proyecto Windows Forms 2. Agrego una referencia a Speech.Synthesis 3. Agrego un botón con este código al hacer clic: try { SpeechSynthesizer speaker = new SpeechSynthesizer (); speaker.Rate = 1; speaker.Volume = 100; speaker.Speak("Hello"); //speak.SpeakAsync("Hello world, how are you doing"); } catch (Exception ex) { MessageBox.Show(ex.Message); }
Pero siempre obtengo el mensaje de excepción "Object reference not set to an instance of an object". El ejemplo es muy sencillo, basado en varios que he encontrado en la red pero no entiendo la razón del error, se supone que speaker debe haber sido correctamente instanciado tras la instrucción new. Espero su ayuda, cualquier comentario es bienvenido.
46
« en: Miércoles 10 de Noviembre de 2010, 04:48 »
Tienes que revisar la documentación del compilador que estés usando, revisa qué funciones estándar están implementadas, si no hay ninguna, tendrás que hacerlo "a mano".
47
« en: Viernes 29 de Octubre de 2010, 18:05 »
Es muy probable que las cámaras no estén soportadas por OpenCV, lo que yo suelo hacer es utilizar la biblioteca videoInput para la conexión con las cámaras (usa DirectX) y después OpenCV para procesar las imágenes, me ha dado muy buenos resultados. De hecho, se supone que las versiones más recientes de OpenCV vendría integrada videoInput, aunque usa la interfaz anterior de OpenCV y no es posible acceder a la interfaz original de videoInput. Resumiendo, les recomiendo que usen videoInput o alguna otra para la captura, y OpenCV para procesar. posman: es cierto que la función espera el índice de la cámara, pero se supone que al recibir -1 muestra un menú para elegir de entre los dispositivos detectados. Sin embargo, dicha opción no se ha mantenido estable entre diferentes versiones de OpenCV. alex_serrano: en esta dirección: http://hsblog.mexchip.com/es/2008/11/us ... n-express/ puedes encontrar una miniguía para usar OpenCV con VS 2008 Express, probablemente te sirva.
48
« en: Viernes 29 de Octubre de 2010, 17:56 »
O también, ofrece una pequeña "compensación", puede que alguien se anime .
49
« en: Martes 26 de Octubre de 2010, 17:18 »
Para el caso de la memoria libre, yo uso free para tomar en cuenta la que está siendo usada para caché.
50
« en: Martes 19 de Octubre de 2010, 05:36 »
¿Debe ser una excepción lo que generes para esos casos, porqué no generas la excepción solo cuando no es permisible continuar?
Páginas: 1 [2] 3 4 ... 41
|
|
|