SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: m0skit0 en Miércoles 1 de Abril de 2009, 16:19

Título: [SOLUCIONADO] Error en constructor de clase
Publicado por: m0skit0 en Miércoles 1 de Abril de 2009, 16:19
Error: 5 cframe.cpp new types may not be defined in a return type
Error: 5 cframe.cpp two or more data types in declaration of `cFrame'
Error: 5 cframe.cpp two or more data types in declaration of `cFrame'
Error: 5 cframe.cpp two or more data types in declaration of `cFrame'
Error: 5 cframe.cpp return type specification for constructor invalid

Código: C++
  1. //cframe.cpp
  2. #include "clases.h"
  3.  
  4. cFrame::cFrame()
  5. {
  6.     frame = NULL;
  7. }
  8.  
Código: C++
  1. //clases.h
  2. class cFrame
  3. {
  4.     private:
  5.         BITMAP *frame;
  6.    
  7.     public:
  8.         cFrame();
  9.         ~cFrame();
  10.         void obtener(BITMAP *ob_frame);    
  11.         void modificar(BITMAP *mod_frame);
  12. };
  13.  

 :wacko:  :wacko:
Título: Re: Error en constructor de clase
Publicado por: Eternal Idol en Miércoles 1 de Abril de 2009, 16:49
No esta definido BITMAP:
#include <windows.h>
Título: Re: Error en constructor de clase
Publicado por: m0skit0 en Miércoles 1 de Abril de 2009, 17:00
Perdona, no he incluído toda la información...

En clases.h está:
Código: C
  1. #include <allegro.h>
  2.  

Donde sí está definido BITMAP.
Título: Re: Error en constructor de clase
Publicado por: Eternal Idol en Miércoles 1 de Abril de 2009, 18:04
Bueno, no se, pero con hacer esto:
//clases.h
typedef int BITMAP;

Ya me compila en VC++ y g++ ...
Título: Re: Error en constructor de clase
Publicado por: m0skit0 en Miércoles 1 de Abril de 2009, 18:34
Gracias Eternal Idol, pero me sigue sin funcionar:

Código: C++
  1. typedef int BITMAP;
  2.  
  3. ////////////////
  4. //Constructores
  5. ////////////////
  6. cFrame::cFrame()
  7. {
  8.     frame = NULL;
  9. }
  10.  
4 cframe.cpp two or more data types in declaration of `BITMAP'
4 cframe.cpp extraneous `int' ignored
276 gfx.h 'BITMAP' has a previous declaration as `typedef struct BITMAP BITMAP'

O sea que sí reconoce el tipo declarado en gfx.h BITMAP...  <_<  ¿Pero no reconoce "int"?  :argh:

Código: C
  1. typedef struct BITMAP            /* a bitmap structure */
  2. {
  3.    int w, h;                     /* width and height in pixels */
  4.    int clip;                     /* flag if clipping is turned on */
  5.    int cl, cr, ct, cb;           /* clip left, right, top and bottom values */
  6.    GFX_VTABLE *vtable;           /* drawing functions */
  7.    void *write_bank;             /* C func on some machines, asm on i386 */
  8.    void *read_bank;              /* C func on some machines, asm on i386 */
  9.    void *dat;                    /* the memory we allocated for the bitmap */
  10.    unsigned long id;             /* for identifying sub-bitmaps */
  11.    void *extra;                  /* points to a structure with more info */
  12.    int x_ofs;                    /* horizontal offset (for sub-bitmaps) */
  13.    int y_ofs;                    /* vertical offset (for sub-bitmaps) */
  14.    int seg;                      /* bitmap segment */
  15.    ZERO_SIZE_ARRAY(unsigned char *, line);
  16. } BITMAP;
  17.  
Me explico más en profundidad: en clases.h tengo todas las especificaciones de las clases junto con algunas cabeceras:

Código: C
  1. #include <string>
  2. #include <allegro.h>
  3. #include "tipos.h"
  4. #include "constantes.h"
  5.  
Luego por cada clase un .cpp. Pero da el error comentado en el primer post en el constructor, da igual la clase que sea -aunque no tenga BITMAP como atributo-.

Todo esto usando Dev-C++, con el enlazador configurado con -lalleg. De hecho ejemplos más sencillos sí compilan con la librería, pero con C++ ya no...

¿Es posible que se trate del orden en que g++ intenta compilarlo? Aunque no le veo mucho sentido, porque cada .cpp sólo depende de clases.h, que está incluído...  :brickwall: Adjunto clases.h y cframe.cpp por si acaso...  :mellow:
Título: Re: Error en constructor de clase
Publicado por: Eternal Idol en Miércoles 1 de Abril de 2009, 19:00
No tengo strings.h, tipos.h, constantes.h (ni allegro.h en realidad) asi que trata de editar el codigo hasta que funcione o reducilo a la minima expresion que no compile.
Título: Re: Error en constructor de clase
Publicado por: m0skit0 en Jueves 2 de Abril de 2009, 10:52
Nada, nada, olvídenlo, ese error era por la falta de ; al final de la especificación de clase...  <_<

Volví a insertar las clases de una en una, corrigiendo los errores y ya compila.  :clown:

¡Gracias por la atención prestada!  :good:  :comp:
Título: Re: Error en constructor de clase
Publicado por: Eternal Idol en Jueves 2 de Abril de 2009, 11:12
De nada (aca en el foro el ; estaba en cFrame)  :ph34r:
Título: Re: Error en constructor de clase
Publicado por: m0skit0 en Jueves 2 de Abril de 2009, 11:57
Cita de: "Eternal Idol"
aca en el foro el ; estaba en cFrame
Sí, pero en el proyecto no  :ph34r:

Se me habrán traspapelado los ficheros con otros... En fin, una cuestión de "trasficherado"  ^_^