 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
dulci Ens

Registrado: 15 Ene 2003Mensajes: 46
|
Publicado: Dom 02 Feb, 2003 10:38 pm Asunto: UNA CLASE,MUCHOS FORMULARIOS |
|
|
Hola,como estan? yo cada vez mas enganchada con c++ builder,el cual es muy buen lenguaje de programacion,llevo solo 1 mes con el y en un mes mas tendre si dios quiere mi gestor de base de datos, y mucho se los debo a ustedes.
Tengo un problema con una clase,he definido una clase arbol en el unit1.h,el cual es mi formulario principal,puse como friend las funciones de esa clase en la definicion del form1,y estoy implementando las funciones en el unit1.cpp.El problema es que tengo otro formulario el cual necesita funciones de la clase arbol y ya trate de ponerlas como friend pero me dice que la clase arbol no esta definida y si la defino de vuelta en el unit4.h,me dice que hay una multiple declaracion para esa clase,realmente necesito que esa clase la usen casi todos los formularios,como hago???????????.
Les adjunto codigo para que se les aclare el panorama
en unit1.h la defino y la incluyo en la definicion del form1
class arbol
{
private:
FILE *cabecera,*archivo;
long raiz,pos,padre,hijo;
char *nombrearch,*nombrecab;
public:
arbol(){raiz=-1;pos=0;padre=0;hijo=0;nombrearch=NULL;nombrecab=NULL;cabecera=NULL;archivo=NULL;}
arbol(char *indi,char *indi2);
void alta(indices index,AnsiString tabla);
};
class TForm1 : public TForm
{
__published: // IDE-managed Components
aca los componenetes
private:
friend void arbol::arbol();
friend void arbol::arbol(char *indi,char *indi2); // User declarations
public: // User declarations
__fastcall TForm1(TComponent* Owner);
void __fastcall ValidarCadena(char &Key);
void __fastcall ValidarNumero(char &Key);
void __fastcall ValidarReal(char &Key);
void __fastcall renombrarindice(AnsiString viejo,AnsiString nuevo,char *dire);
void __fastcall eliminarindice(AnsiString nombre,char *direc);
};
en unit1.cpp
arbol::arbol(char *indi,char *indi2)
{
nombrearch=new char[strlen(indi)+1];
nombrecab=new char[strlen(indi2)+1];
strcpy(nombrearch,indi);
strcpy(nombrecab,indi2);
archivo=fopen(nombrearch,"wb");
cabecera=fopen(nombrecab,"wb");
if (archivo==NULL){ShowMessage("Error de Apertura");}
if (cabecera==NULL){ShowMessage("Error de Apertura");}
fclose(archivo);
fclose(cabecera);
}
y aqui tambien defino variables tipo arbol y andan perfecto
y en unit4.h lo que tengo es esto
class TForm4 : public TForm
{
__published: // IDE-managed Components
aca los componentes
private:
friend void arbol::alta(indices index,AnsiString tabla);
friend void arbol::arbol();
// User declarations
public: // User declarations
__fastcall TForm4(TComponent* Owner);
void __fastcall ValidarCadena(char &Key);
void __fastcall ValidarNumero(char &Key);
void __fastcall ValidarReal(char &Key);
};
aca me salta el error diciendo que arbol no es una clase definida o algo asi,les aclaro que en unit4.cpp tengo incluido unit1.h.
Muchisimas Gracias!!!!!!!!!!!!!!!!!!!!!!!!! _________________ Dulci |
|
| Volver arriba |
|
 |
BJarne STOUSTROUP Invitado
|
Publicado: Mar 04 Feb, 2003 1:09 pm Asunto: |
|
|
Veo que has leído mi libro de arriba abajo pero bueno...
Lo primero que no entiendo es porque no defines el Class arbol con una cabecera independiente y lo incluyes en las Unit que lo necesiten, lo segundo es que no se porque abusas de las funciones friend puediendo heredar...con mas razón todavía si estas sobreescribiendo funciones como en el Unit4.hpp
class TForm4 : public TForm
{
__published: // IDE-managed Components
aca los componentes
private:
friend void arbol::alta(indices index,AnsiString tabla);
friend void arbol::arbol();
// User declarations
public: // User declarations
__fastcall TForm4(TComponent* Owner);
void __fastcall ValidarCadena(char &Key);
void __fastcall ValidarNumero(char &Key);
void __fastcall ValidarReal(char &Key);
};
Creo que con eso se solucionaria tu probemilla
Cuando incluyas la clase arbol crea el objeto y trabaja con el de la misma manera que los BitBtn están en otra clase, por cierto esta idea es más reutilizable que incluirla en el Unit1 y que el compilador no sepa donde buscar y/o se vuelva medio loco |
|
| Volver arriba |
|
 |
dulci Ens

Registrado: 15 Ene 2003Mensajes: 46
|
Publicado: Mar 04 Feb, 2003 1:21 pm Asunto: No da resultado |
|
|
Disculpa,pero nose de que libro se trata,lo que me diste en codigo no da resultado,ya lo habia probado y el error que me da es este [C++ Error] Unit4.h(41): E2090 Qualifier 'arbol' is not a class or namespace name.
Disculpa,pero no tengo mucho tiempo trabajando en c builder y sinceramente nose como definir un .h aparte,asi que si podrias decirme te lo agradezco. _________________ Dulci |
|
| Volver arriba |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|