• Lunes 6 de Mayo de 2024, 06:31

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 - kaito

Páginas: [1]
1
Visual C++ / Re: Utilizar extern con una matriz dinamica de texto
« en: Sábado 21 de Marzo de 2009, 15:48 »
Cita de: "m0skit0"
Esto está mal:

Código: C
  1. char *cadena;
  2.  
porque tú lo que quieres es un puntero a un array de punteros, esto es:

Código: C
  1. char *cadena[];
  2. //O también:
  3. char **cadena;
  4.  

Al utilizar char *cadena[]; ha producido el error C2440: '=' : no se puede realizar la conversión de 'char (*)[10]' a 'char *[]'

Después, modifique la declaración por char (*cadena)[10];

Utilizando esta forma en la declaración de la variable, he desarrollado dos opciones:

A) Declarar una variable global al incio del codigo/Asignar con una igualdad los valores de la matriz local.

Código: C++
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. char (*cadena)[10];
  6.  
  7. void funcion(){
  8.     int VariableIndice=2;
  9.     char (*Cadena)[10]=new char [VariableIndice][10];
  10.     strcpy(Cadena[0],"Uno");
  11.     strcpy(Cadena[1],"Dos");
  12.     cadena=Cadena;
  13. }
  14.  
  15. void main() {   
  16.     funcion();
  17.     cout << cadena[0] << endl;
  18.     cout << cadena[1] << endl;
  19. }
  20.  



b) Utilizar una variable global al inicio del código/Dentro de la funcion eliminar con delete y redimensionar:

Código: C++
  1. #include <iostream>
  2. #include <string>
  3. using namespace std;
  4.  
  5. char (*cadena)[10]=new char [1][10];
  6.  
  7. void funcion(){
  8.     int VariableIndice=2;
  9.     delete [] cadena;
  10.     char (*cadena)[10]=new char [VariableIndice][10];
  11.     strcpy(cadena[0],"Uno");
  12.     strcpy(cadena[1],"Dos");
  13. }
  14.  
  15. void main() {   
  16.     funcion();
  17.     cout << cadena[0] << endl;
  18.     cout << cadena[1] << endl;
  19. }
  20.  


Las dos formas funcionan correctamente. Pero :brickwall: en la opción A asigno las direcciones a memoria de una variable local, que no es visible o desaparece al salir de la función. ¿Podría ocurrir que durante la ejecución de otros procesos del programa se modificasen los valores de esas direcciones a memoria?.

2
Visual C++ / Re: Utilizar extern con una matriz dinamica de texto
« en: Sábado 21 de Marzo de 2009, 12:11 »
Cita de: "Eternal Idol"
El extern ahi no te sirve de nada, sacandolo tendras un puntero a char y su ambito sera todo el modulo.

He compilado el código:

Código: C++
  1.  
  2. #include <iostream>
  3. #include <string>
  4.  
  5. using namespace std;
  6.  
  7. char *cadena;
  8.  
  9. void funcion() {
  10.    int VariableIndice=2;
  11.    char (*cadena)[10]=new char [VariableIndice][10];
  12.    strcpy (cadena[0],"Uno");
  13.    strcpy (cadena[1],"Dos");
  14. }
  15.  
  16. void main () {
  17.    funcion();
  18.    cout << cadena[0] << endl;
  19.    cout << cadena[1] << endl;
  20. }
  21.  
  22.  

Y produce error de ejecución: Excepción no controlada en 0x0......:Infracción de acceso al leer la ubicación 0x000000000.

Intento mostrar el texto asignado a cadena en la funcion, desde la funcion principal main como si fuera una variable global.

Entiendo, que la matriz dinámica deja de ser visible al finalizar funcion();, como debería declarar la matriz dinámica para que fuera visible desde main.

Saludos.


PD.: Por favor, eliminen los dos mensajes anteriores, he pulsado el botón citar, en lugar de editar. :comp:

3
Visual C++ / Re: Utilizar extern con una matriz dinamica de texto
« en: Sábado 21 de Marzo de 2009, 10:00 »
Cita de: "Eternal Idol"
extern se suele usar en las cabeceras (.h) para compartir un simbolo entre modulos

Gracias por contestar.

Mi intención es poder utilizar la matriz de memoria dinámica local de la función en el bloque principal main, si es posible.

Efectivamente, he visto la utilización de la sentencia extern en un archivo de cabecera. Entendí en la ayuda de VC++ y por el ejemplo, que se utilizaba para hacer global una variable local o declarada en otro lugar del código o  función.

No sé si se puede convertir una variable de memoria dinámica (matriz) local en global.

En los código que he encontrado, se ha utilizado variables o incluso estructuras de memoria estática , declaradas al inicio del código y posteriormente utilizadas en una función encargada de realizar algún proceso del programa.

Pero con matrices de memoria dinámica, no.


Saludos.

4
Visual C++ / Utilizar extern con una matriz dinamica de texto
« en: Viernes 20 de Marzo de 2009, 22:55 »
Saludos.

El siguiente código:

Código: C++
  1. #include <iostream>
  2. #include <string>
  3.  
  4. using namespace std;
  5.  
  6. extern char *cadena;
  7.  
  8. void funcion() {
  9.    char (*cadena)[10]=new char [2][10];
  10.    strcpy (cadena[0],"Uno");
  11.    strcpy (cadena[1],"Dos");
  12. }
  13.  
  14. void main () {
  15.    funcion();
  16.    cout << cadena[0] << endl;
  17.    cout << cadena[1] << endl;
  18. }
  19.  

Genera el siguiente error de compilación: error LNK2001: símbolo externo "char * cadena" (?cadena@@3PADA) sin resolver.
                                                              fatal error LNK1120: 1 externos sin resolver

En el código que estoy desarrollando, la función se encargaria de leer las cadenas de texto de un archivo. El primer dato del archivo es un valor entero que indica el número de cadenas en el archivo y será utilizado para declarar la dimensión de la matriz de memoria dinámica.

He buscado en varios libros y sitios webs pero no he visto ningun ejemplo parecido. Gracias de antemano.

5
Programación de Videojuegos / Re: Mejor Lenguaje Para Crear Videojuegos
« en: Jueves 10 de Julio de 2008, 21:06 »
Aqui teneis otro game engine, que ademas de completo y gratuito es OPEN SOURCE, con todo su codigo de programacion disponible (creo que viene en visual c) para el que quiera hacerse su propio game engine. Se llama REALITY FACTORY.     Mas informacion:   mundovilla.foroactivo.es/foro/viewtopic.php?t=37

6
Programación de Videojuegos / Re: Mejor Lenguaje Para Crear Videojuegos
« en: Martes 8 de Julio de 2008, 21:54 »
Hay muchas paginas dedicadas a la programacion en c++, vb,java, python, etc... con el tipico ejemplo del arkanoid o ping-pong, pero despues ya no vienen mas ejemplos o el codigo del programa esta hecho para la version del 2000 y tu tienes la del 2001 o te falta una libreria que instalar, etc... Un monton de complicaciones que te terminan quitando las ganas de seguir.

Hay otra alternativas como el blitzbasic3d, con muchos ejemplos y manuales en español muy completos, pero que no dispone de un engine que nos permita obtener resultados a corto plazo y esta un poco desfasado (utiliza directx7, aunque para hacer un juego casero sobra).

Hasta que llegamos a mundovilla.es, que enfoca el tema de la programacion de videojuegos desde un punto de vista de "ocio", no de estudio ni de profesion sino de pasar una rato ameno frente al ordenador y obtener algun resultado, mediante los GAME ENGINES mas conocidos (FPS Creator, 3DGameStudio, 3DWorldStudio,FreeWorld3D). Con el GAME ENGINE no abordaremos muchos aspectos del juego lo cual nos ahorrara mucho tiempo. Incluso podemos usar el codigo utilizado en otros proyectos del engine (los que vienen de ejemplo en la instalacion) en nuestro nuevo proyecto (por ejemplo la IA 'inteligencia artificial' de los personajes) con un simple copiar/pegar.  El inconveniente de estos GAME ENGINES es que son aplicaciones comerciales (es decir no gratuitas) aunque existen versiones de prueba, o free muy recortadas en cuanto a prestaciones.

Solo he encontrado una GAME ENGINE llamado NeoAxis Engine con una version "completa" y "gratuita" para su uso NO comercial que utiliza librerias GPL como:
-OGRE 3D
-OPEN DYNAMICS ENGINE
-Ageia PHYSX
-FMOD
Algunas no son GPL pero se autoriza su uso NO comercial.

Este engine utiliza directx 9.0c y la tecnologia .net con C#(No es necesario instalar Visual C#, pero si el .net Framework 2.0), tiene editor de mapas (tipo WED de 3DGameStudio) y un editor de recursos (tipo MED del 3DGameStudio).
El procedimiento es similar a otros game engines, creamos nuestros escenarios y colocamos los personajes y objetos mediante el editor de mapas, y le damos vida mediante codigo en C# que ya tenemos hecho de otro proyecto o que hacemos/modificamos nosotros. Considero que aprender C# es mas recomendable que aprender un -script language- que te vale solo para un programa. Ya que se hace el esfuerzo en aprender un lenguaje creo que merece la pena aprender C# y encima sobre lo que nos interesa, los videojuegos. (aunque para hacer nuestro juego no es necesario ser un programador C#, un copiar/pegar y un poco de maña sobra)  Mas informacion: neoaxisgroup.com/description.htm

Yo tengo instalada la version "completa" para uso NO comercial y he probado el proyecto DEMO donde viene todo lo que puede hacer este engine (FPS, RTS, TPS,...) yo creo que de todo.
La descarga esta al FINAL de esta pagina: neoaxisgroup.com/download.htm

IMPORTANTE REQUISITOS tener instalado para que funcione: Microsoft .Net Framework 2.0, Microsoft Runtime DirectX9c, y los ultimos drivers de vuestra tarjeta grafica (los enlaces a estos recursos estan al principio de la misma pagina de descarga del engine). Luego ejecutamos el instalador del engine, abrimo el 'Map Editor' y podemos comenzar a crear nuestro videojuego siguiendo el manual que incluye (no hay que enlazar librerias ni nada raro). Como tengo actualizado el sistema constantemente no hizo falta instalar nada, aparte del engine claro.
 
Os animo a todos a que lo descargueis y lo probeis. Espero que pronto haya una comunidad hispana con recursos y tutoriales del NeoAxis Engine.

Páginas: [1]