Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-11-2007
waremovil waremovil is offline
Miembro
 
Registrado: ago 2007
Ubicación: Zaragoza
Posts: 78
Poder: 17
waremovil Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 28-11-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
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.
Responder Con Cita
  #3  
Antiguo 28-11-2007
waremovil waremovil is offline
Miembro
 
Registrado: ago 2007
Ubicación: Zaragoza
Posts: 78
Poder: 17
waremovil Va por buen camino
perfecto! muchas gracias

un saludo
Responder Con Cita
  #4  
Antiguo 29-11-2007
waremovil waremovil is offline
Miembro
 
Registrado: ago 2007
Ubicación: Zaragoza
Posts: 78
Poder: 17
waremovil Va por buen camino
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
Responder Con Cita
  #5  
Antiguo 30-11-2007
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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.
Responder Con Cita
  #6  
Antiguo 30-11-2007
waremovil waremovil is offline
Miembro
 
Registrado: ago 2007
Ubicación: Zaragoza
Posts: 78
Poder: 17
waremovil Va por buen camino
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?
Responder Con Cita
  #7  
Antiguo 30-11-2007
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
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.
Responder Con Cita
  #8  
Antiguo 01-12-2007
waremovil waremovil is offline
Miembro
 
Registrado: ago 2007
Ubicación: Zaragoza
Posts: 78
Poder: 17
waremovil Va por buen camino
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
Responder Con Cita
  #9  
Antiguo 01-12-2007
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
¿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.
Responder Con Cita
  #10  
Antiguo 04-12-2007
waremovil waremovil is offline
Miembro
 
Registrado: ago 2007
Ubicación: Zaragoza
Posts: 78
Poder: 17
waremovil Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

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


La franja horaria es GMT +2. Ahora son las 07:53:05.


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
Copyright 1996-2007 Club Delphi