Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

instanciar en una clase una estructura declarada en otra

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: instanciar en una clase una estructura declarada en otra Responder citando

¡Hola a tod@s!

A ver si se explicarme:

Por un lado tengo un formulario en el que he declarado, fuera de la clase que define el formulario, una estructura. Ejemplo:

//---------------------------------------------------------------------------

#ifndef Unit2H
#define Unit2H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>

#include "Unit1.h"
//---------------------------------------------------------------------------
struct stA{
int a;
};

class TForm2 : public TForm
{
__published: // IDE-managed Components
private: // User declarations
public: // User declarations
__fastcall TForm2(TComponent* Owner);
stA s;
};
//---------------------------------------------------------------------------
extern PACKAGE TForm2 *Form2;
//---------------------------------------------------------------------------
#endif


Si luego, en otro formulario intento declarar otra variable de tipo stA, me da el siguiente error:

[C++ Error] Unit1.h(19): E2303 Type name expected

El código es:

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>

#include "Unit2.h"
//---------------------------------------------------------------------------
class TForm1 : public TForm
{
__published: // IDE-managed Components
private: // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
stA t;
};
//---------------------------------------------------------------------------
extern PACKAGE TForm1 *Form1;
//---------------------------------------------------------------------------
#endif

No entiendo por qué da el error si tengo hecho el include.
Gracias por adelantado.
Volver arriba
Mensaje    Asunto: Responder citando

Loque sucede es que en la unidad 1 incluyes la unidad 2 y en la unidad 2 inclues la unidad 1.... de cierta manera como queel compilador se atora en esos casos y te manda el error, la verdad no tengo idea de a que se deba pero a mi me ha pasado muy frecuente, lo que hago en esos casos es en vez de incluir la unidad manualmente, hacerlo con Include Unit o directamente en el .cpp .... de esta manera no te mandaria el error, o de otra manera, declarar la estructra en otro archivo de cabecera e incluirla en ambas formas....
Espero te sirva saludos
_________________
Dirección Municipal de Informática
H. Ayuntamiento de Tijuana
Arriba Lopez Obrador !!!
Los Mexicanos Merecemos Respeto !!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

¡Hola!

Gracias por responder.

Efectivamente es por la llamada mútua. Lo que pasa es que necesito que sea así.
Lo que he hecho es, en vez de declarar la variable dentro del .h de Unit1, la he declarado en el .cpp y listo. Si no, tendría que hacer lo que dices de sacar la declaración a un .h separado e incluirlo en ámbas clases.

Hasta otra Wink
Volver arriba
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.