Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Archivo de cabecera solo incluido en otro (https://www.clubdelphi.com/foros/showthread.php?t=91939)

aguml 07-06-2017 14:19:30

Archivo de cabecera solo incluido en otro
 
No se me ocurre otro titulo mas descriptivo asi que intentaré explicarme aqui lo mejor posible.
Imaginen un proyecto donde tenemos: main.cpp, clase1.cpp, clase1.h, clase2.cpp, clase2.h.
si en clase1.h uso dentro de esa clase a la clase2 me veo obligado a incluir ese archivo de cabecera en clase1.h y luego, al incluir clase1.h a main.cpp tengo acceso a ambas clases y lo que quiero es restringir y que solo tenga acceso a la clase1 y que la clase2 solo se pueda usar dentro de clase1. No se si me he explicado con claridad. ¿Alguien me ayuda con eso?
Os pongo la que seria la clase1:
Código PHP:

#ifndef CLASS_ALUMNOS
#define CLASS_ALUMNOS
#include "RegAlumno.h"

class Alumnos
{
    private:
        
RegAlumno *alumnos//Es la clase declarada en RegAlumno.h
        
int nAlumnos;
    public:
        
Alumnos(int nAlumnos);
        ~
Alumnos();
        
void CalculaCalificacionesMedias(void);
        
void MostrarCalificacionesMedias(void);
        
void SolicitarDatos(void);
};
#endif
//--------------------------------------------------------------------------- 


Ñuño Martínez 08-06-2017 10:51:06

Me temo que en C no se puede hacer eso. O al menos no de forma simple.

Se me ocurre que puedes intentar declarar la clase RegAlumno en la sección privada, pero no sé si funcionaría:
Código:

  class Alumnos {
    private:
      class RegAlumno { ...};
      RegAlumno *alumnos;
    (...)
  };

o también:
Código:

  class Alumnos {
    private:
      #include "RegAlumno.h"
      RegAlumno *alumnos;
    (...)
  };

Pero ya digo que no sé si funcionaría, hace mucho que no uso C++.

escafandra 10-06-2017 01:00:31

Sustituye:
Código:

RegAlumno *alumnos;
Código:

void* alumnos;
En el cuerpo de la clase pones el #include "RegAlumno.h" y haces un cast del puntero alumnos a RegAlumno* para usar ese miembro.

Otro truco es hacerlo como lo hacer ahora pero al usuario final le das una cabecera donde lo cambias por un void* dando el cuerpo ya compilado en un obj o dll


Saludos.


La franja horaria es GMT +2. Ahora son las 21:01:29.

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