Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   duda: pasar array de estructuras entre forms distintos (https://www.clubdelphi.com/foros/showthread.php?t=50791)

waremovil 28-11-2007 13:46:13

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

Lepe 28-11-2007 13:56:07

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

waremovil 28-11-2007 23:31:59

perfecto! muchas gracias

un saludo

waremovil 29-11-2007 22:26:37

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

escafandra 30-11-2007 00:27:55

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.

waremovil 30-11-2007 09:13:07

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?

escafandra 30-11-2007 15:55:09

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.

waremovil 01-12-2007 17:27:38

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

escafandra 01-12-2007 19:03:17

¿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

waremovil 04-12-2007 23:19:08

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


La franja horaria es GMT +2. Ahora son las 21:15:43.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi