• Viernes 8 de Noviembre de 2024, 11:45

Autor Tema:  no me compila  (Leído 3715 veces)

Alfonsos1

  • Miembro activo
  • **
  • Mensajes: 60
    • Ver Perfil
no me compila
« en: Martes 17 de Mayo de 2011, 18:55 »
0
Estoy usando una libreria de windows para el sonido, y allegro para la parte grafica

el problema es que en ambas librerias esta declarada la estructura "BITMAP" y no me permite compilar

que hago?

el error:
Dev-Cppincludeallegrosystem.h conflicting declaration 'struct BITMAP'
Dev-Cppincludewingdi.h 'BITMAP' has a previous declaration as `typedef struct tagBITMAP BITMAP'

ssaammuu

  • Miembro activo
  • **
  • Mensajes: 41
  • Nacionalidad: es
    • Ver Perfil
    • http://desarrollodejuegos.net
Re: no me compila
« Respuesta #1 en: Martes 17 de Mayo de 2011, 19:15 »
0
Me parece que pudes resolver esto si en vez de incluir windows.h includes winalleg.h

:)

Alfonsos1

  • Miembro activo
  • **
  • Mensajes: 60
    • Ver Perfil
Re: no me compila
« Respuesta #2 en: Martes 17 de Mayo de 2011, 20:15 »
0
NO, no reconoce las funciones de winsow si hago eso...

Alfonsos1

  • Miembro activo
  • **
  • Mensajes: 60
    • Ver Perfil
Re: no me compila
« Respuesta #3 en: Martes 17 de Mayo de 2011, 21:02 »
0
la libreria que me causa creo que es mmsystem

esta libreria aparentemente tambien tiene su propia defincicion de bITMAP

ssaammuu

  • Miembro activo
  • **
  • Mensajes: 41
  • Nacionalidad: es
    • Ver Perfil
    • http://desarrollodejuegos.net
Re: no me compila
« Respuesta #4 en: Martes 17 de Mayo de 2011, 22:44 »
0
mm que raro, se supone que winalleg se hace cargo de estos conflictos internamente aunque es necesario que winalleg sea incluido DESPUÉS de allegro.
Código: C++
  1. #include "allegro.h"
  2. #include "winalleg.h"
  3.  

Si esto no funciona, pues la verdad es que la única solución que veo yo, es añadir allegro dentro de un namespace y así, para declarar un BITMAP de allegro usarías allegro::BITMAP donde allegro es el nombre del namespace. Aunque la verdad es que podrías usar allegro para el sonido también.

Alfonsos1

  • Miembro activo
  • **
  • Mensajes: 60
    • Ver Perfil
Re: no me compila
« Respuesta #5 en: Sábado 21 de Mayo de 2011, 04:22 »
0
Podrias esplicar eso un poco mas ssaammuu?

nunca habia usado namespace ademas del tipico
using namespace sdt;

ssaammuu

  • Miembro activo
  • **
  • Mensajes: 41
  • Nacionalidad: es
    • Ver Perfil
    • http://desarrollodejuegos.net
Re: no me compila
« Respuesta #6 en: Sábado 21 de Mayo de 2011, 13:05 »
0
Oops, me acabo de dar cuenta porque no te funcionaba...
Después de winalleg tienes que incluir los headers de windows/mmsystem o lo que sea
Código: C
  1. #include <allegro.h>
  2. #include <winalleg.h>
  3. #include <windows.h>
  4. #include <MMSystem.h>
  5.  

Alfonsos1

  • Miembro activo
  • **
  • Mensajes: 60
    • Ver Perfil
Re: no me compila
« Respuesta #7 en: Sábado 21 de Mayo de 2011, 18:39 »
0
si ya habia intentado eso, pero me dice que no reconoce las siguientes funciones:

Código: C++
  1. #include <allegro.h>
  2. #include <winalleg.h>
  3. #include <windows.h>
  4. #include <mmsystem.h>
  5. #include <stdio.h>
  6. #include <math.h>
  7. #include <time.h>
  8. #define BUFFER 880
  9. #define FREC 44100
  10. #define NOTAS 30
  11. #define TIEMPO 10
  12. #define TAMNOTA0 5400
  13.  
  14. WAVEFORMATEX WaveFormat;
  15. HWAVEOUT HWaveOut;
  16. DWORD WaveBufSize;
  17. WAVEHDR WaveHeader[3];
  18.  
  19. int posbuffer=0;
  20. unsigned char onda[NOTAS][TAMNOTA0*2];
  21. int spc[NOTAS];//Samples por ciclo
  22. unsigned char nota=5;
  23. int volumen=0;
  24.  
  25. void CALLBACK WaveOutProc(HWAVEOUT waveOut, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
  26. {
  27.     if(uMsg==MM_WOM_DONE)
  28.     {
  29.         (*(WAVEHDR *)dwParam1).lpData=(char *)onda[nota]+posbuffer;
  30.         waveOutWrite(HWaveOut, (WAVEHDR *)dwParam1, sizeof(WAVEHDR));
  31.         waveOutSetVolume(HWaveOut,volumen);
  32.         posbuffer=(BUFFER+posbuffer)%spc[nota];
  33.     }
  34. }
  35.  
  36.  
  37. int main()
  38. {  
  39.     allegro_init();
  40.     install_keyboard();
  41.     set_color_depth(32);
  42.     set_gfx_mode(GFX_AUTODETECT_WINDOWED, 1024, 256, 0, 0);
  43.     BITMAP *buffer = create_bitmap(1024, 256);
  44.     clear_to_color(buffer, makecol(0,0,0));
  45.  
  46.     blit(buffer, screen, 0, 0, 0, 0,1024, 256);
  47.  
  48.     readkey();
  49.     destroy_bitmap(buffer);
  50.     return 0;
  51. }
  52. END_OF_MAIN();
  53.  

el error es este:

  [Linker error] undefined reference to `waveOutWrite@12'
  [Linker error] undefined reference to `waveOutSetVolume@8'

ssaammuu

  • Miembro activo
  • **
  • Mensajes: 41
  • Nacionalidad: es
    • Ver Perfil
    • http://desarrollodejuegos.net
Re: no me compila
« Respuesta #8 en: Domingo 22 de Mayo de 2011, 00:58 »
0
Pero eso ya no es debido a Allegro ya que si quitas todo lo relacionado con Allegro del código el mismo problema sigue presente por lo que he visto. Me temo que ahí yo no puedo ayudarte, porque de sonido con las librerías de windows yo ni idea xD. De todos modos Allegro tiene incoporado funcionalidad para el manejo de sonido si quieres hecharle un vistazo a eso.

Alfonsos1

  • Miembro activo
  • **
  • Mensajes: 60
    • Ver Perfil
Re: no me compila
« Respuesta #9 en: Domingo 22 de Mayo de 2011, 03:53 »
0
el problema si tiene que ver con allegro, si no inclullo las librerias de allegro, no me tira esos errores...

si conosco las funciones de sonido de allegro pero yo presiso algo de menor nivel.

TALVES LO MEJOR SEA USAR OTRA LIBRERIA PARA LA PARTE GRAFICA

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: no me compila
« Respuesta #10 en: Lunes 13 de Junio de 2011, 08:44 »
0
Citar
[Linker error] undefined reference to `waveOutWrite@12'
[Linker error] undefined reference to `waveOutSetVolume@8'
Esos son errores de enlazado, e indican que te está faltando enlazar con la biblioteca que contiene el código de las funciones waveOutX. Prueba agregando winmm.lib al enlazador (o probablemente pueda ser también winmm.a si usas MinGW).
La imaginación es el límite.
Hardware & Software | Mexchip