Foros del Web » Programación para mayores de 30 ;) » C/C++ »

[SOLUCIONADO] Problemas con declaración adelantada

Estas en el tema de Problemas con declaración adelantada en el foro de C/C++ en Foros del Web. Buenas, estoy realizando unas clases interconectadas y no se porque me da fallo cuando intento hacer una declaración adelantada. (Si uso #include "cadena.h" donde pongo ...
  #1 (permalink)  
Antiguo 31/03/2014, 11:56
 
Fecha de Ingreso: octubre-2012
Mensajes: 37
Antigüedad: 11 años, 7 meses
Puntos: 0
Problemas con declaración adelantada

Buenas, estoy realizando unas clases interconectadas y no se porque me da fallo cuando intento hacer una declaración adelantada.

(Si uso #include "cadena.h" donde pongo class Cadena; todo funciona a la perfeccion)

No se qué estoy haciendo mal.

Código:
#ifndef _CLAVE_H_
#define _CLAVE_H_

class Cadena;

class Clave {
 public:
  enum Razon {CORTA, ERROR_CRYPT};
  
  class Incorrecta {
  public:
    Incorrecta (const Razon& r) : razon_(r) {}
    Razon razon() const { return razon_; }
  private:
    Razon razon_;
  };
  Clave (const char*) throw (Clave::Incorrecta);

  Cadena clave() const { return pass_cifrada; }
  bool verifica(const char*);
 private:
  Cadena pass_cifrada;
};

#endif
  #2 (permalink)  
Antiguo 31/03/2014, 12:48
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: Problemas con declaración adelantada

El compilador necesita saber SIEMPRE el tamaño de los objetos que manejas y si hay conversiones que hacer (y un largo etcetera). Si sigues esta regla, es mas sencillo entender por qué el error en un caso y en el otro no.

Al hacer

class XXX;

solo dices que el nombre XXX existe, sin mucho mas informacion.
Solo seria util en el caso que uses un puntero a XXX, donde el tamaño (de un puntero) no depende del tamaño de XXX.

Lamentablemente no es el caso, tienes metodos que retornan un objeto de tipo Cadena, y estas guardando dentro de la otra clase, en un miembro, un objeto de tipo Cadena. ¿Como podria calcularse el tamaño de un objeto de la clase Clave sin saberse el tamaño de la clase Cadena?. No es posible -> error.

Cuando usas #include "cadena.h" traes hacia el compilador, antes de compilar la clase Clave, el contenido de la clase Cadena, por lo que es posible conocer el tamaño de ella y con ello sera posible calcular el tamaño de Clave, ademas de todas las operaciones y conversiones y el etcetera asociado.
__________________
Visita mi perfil en LinkedIn
  #3 (permalink)  
Antiguo 31/03/2014, 12:50
Avatar de vangodp  
Fecha de Ingreso: octubre-2013
Mensajes: 934
Antigüedad: 10 años, 7 meses
Puntos: 38
Respuesta: Problemas con declaración adelantada

si el archivo esta junto al principal pones eso "archivo.h"
si quieres puedes poner la ruta completa "c:\miproyecto.....archivo.h"
Otra forma:
por ejemplo si junto en la carpeta dende esta el archivo main.cpp tienes una carpeta llamada includes y dentro tienes el archivo.h lo haces asi "includes/archivo.h"
Luego esta lo de las rutas relativas pero eso se configura mejor en el proyecto si hay uno.
  #4 (permalink)  
Antiguo 31/03/2014, 15:43
 
Fecha de Ingreso: octubre-2012
Mensajes: 37
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Problemas con declaración adelantada

Vale muchas gracias duda resuelta. Usare los include

Etiquetas: funcion, int
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:02.