FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
duda: pasar array de estructuras entre forms distintos
Hola, tengo un problema, no consigo pasar como parametro un array de estructuras entre forms distintos
en un form tengo por ejemplo: struct a{ Ansistring texto; int numero; }; a * var = new a[100] y en otro form tengo struct b{ Ansistring texto; int numero; } sin embargo si intento llamar a una funcion desde un form al otro form y paso como parámetro el array de estructura me da un error de compilación diciendo que no puede convertir "a" en"b" alguien tiene alguna idea? gracias |
#2
|
||||
|
||||
Lo que se suele hacer en estos casos, es crear una nueva unidad (supongo que un .h en C++) donde se declara el tipo de dato. En los Forms 1 y 2 tendrás que hacer un #include de ese .h
Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
#3
|
|||
|
|||
perfecto! muchas gracias
un saludo |
#4
|
|||
|
|||
Hola de nuevo, muchas gracias por la ayuda, pero sigo sin conseguirlo
cada vez que defino una estructura, por. ej. struct Tipo1{...}; si en la función defino como parámetro dicha estructura p.ej. void Funcion(int Var1; Tipo1 * Var2) entonces siempre recibo un "ERROR: TYPE NAME EXPECTED" sencillamente no me permite usar estructuras en las definiciones de funciones alguna pista? muchas gracias |
#5
|
||||
|
||||
Piensa que en C todo tiene que estar definido antes de usarlo aunque sea en una declaración de una función. La definición la debes hacer en un archivo cabecera (.h) que el compilador lea antes de que sea utilizado en otro momento. La cabecera la debes incluir en todos aquellos archivos, sean .cpp ó .h ó . hpp que vallan ha hacer uso de tu variable, estructura, función o clase declarada. La inclusión se hace con un # include <cabecera.h> ó #include "cabecera.h" si se encuentra en la carpeta del resto de los archivos de tu programa.
Saludos. |
#6
|
|||
|
|||
Hola, gracias por contestar, pero aunque incluya la cabecera me da el mismo problema.
incluso he hecho la prueba de empezar otro programa en blanco y declarar la estructura en el mismo form que la función, y aun así me da error parece ser que c++ builder no permite pasar estructuras como parámetro de esta manera, pero mi pregunta es ¿de qué manera se puede? ¿usando algún tipo de puntero? |
#7
|
||||
|
||||
Yo utilizo C++ Builder y no tengo problemas para pasar como parametro una estructura o clase, sólo hay que cuidar de un buen diseño de los archivos cabecera para que no existan errores de tipo "no declarado" o "declarado dos veces" y pensar si el parámeytro lo pasamos por valor o por referencia.
En VCL, todos los componentes son punteros, y eso conviene nenerlo en cuenta para no mometer los clásicis errores del programador de C con los punteros. Si lo que quieres pasar como parámetro es un array, éste realmente es un puntero. Si pasas el valor de dicho puntero, realmente estas pasando el valor del primer elemento del array, que lógicamante es de otro tipo: char *A es un Array de tipo char pero realmente es un "puntero de tipo char". Sinembargo *A es un char, y es el primer char del array A. Saludos. Última edición por escafandra fecha: 30-11-2007 a las 15:59:37. |
#8
|
|||
|
|||
Hola escafandra, pues entonces se me está escapando algun pequeño detalle porque he cambiado el nombre mil veces y sigue dandome el mismo error, incluso cierro todo el proyecto, empiezo uno en blanco y tampoco me deja pasar como parámetro una estructura, mejor dicho, la estructura me deja pasarla, lo que no me deja es definir la funcion cuyo parámetro es una estructura
si por ejemplo tengo: struct Estructura{ AnsiString var1; int var2; } el problema me lo da a continuación, ya que si defino una funcion como esta me da error: void Funcion(int a; Estructura b){ .... } ¿qué puedo estar haciendo mal? un saludo, muchas gracias |
#9
|
||||
|
||||
¿La definición de estructura esta en un archivo cabecara?
Si es así, ese archivo cabacera debe estar incluido antes de la deficición de Funcion. Si no es así y está en el mismo archivo que define Funcion, entonces debe estas definida antes que Funcion. Si pasas Estructura como Funcion(int a, Estructura b), la estas pasando por valor, es decir b, no sera modificada por Funcion a la vuelta. Pero si Funcion la defines como Funcion(ina a, Estructura &b), entonces la pasas por referencia y cualquier modificación que realice Funcion sobre b, se reflerará a la vuelta. Al Pasar por valor, lo que pasa es que pasas una copia de tu parámetro, cosa que no ocurre asi al pasarlo por referencia. Saludos Última edición por escafandra fecha: 10-12-2007 a las 18:45:31. |
#10
|
|||
|
|||
ok, gracias por ayudarme, por fin funciona, había que especificar "struct" en la propia definición de función
es decir struct Estructura{ AnsiString var1; int var2; } y en la definición de función void Funcion(int a; struct Estructura b){ ... } gracias, un saludo |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Pasar datos entre forms | Stanley | Varios | 3 | 06-11-2007 20:26:44 |
pasar un tipo de datos (array of record) entre aplicaciones | mauqu | Varios | 4 | 26-10-2007 20:04:31 |
compartir un array de estructuras entre aplicaciones | mauqu | Varios | 1 | 25-10-2007 23:01:32 |
Pasar datos entre forms | Phacko | Varios | 8 | 20-09-2007 23:58:08 |
Pasar variable o valor entre forms | nachito_tuc | OOP | 3 | 05-09-2006 14:06:41 |
|