Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Qt] problème lors qu make avec FMOD

    20 mars 2008 à 21:31:57

    Bonjours tout le monde

    Voilà je créé un petit programme avec Qt et fmod qui doit normalement lire un mp3 après l'avoir sélectionné.
    Mais lors du make avec la commande Prompt j'obtiens plusieurs érreurs.

    In file included from MaFenetre.cpp:1:
    MaFenetre.h:33: error: ISO C++ forbids declaration of `FSOUND_STREAM' with no type
    MaFenetre.h:33: error: expected `;' before '*' token
    MaFenetre.cpp: In member function `void MaFenetre::lectureMusique(QString)':
    MaFenetre.cpp:40: error: `musique' undeclared (first use this function)
    MaFenetre.cpp:40: error: (Each undeclared identifier is reported only once for 
    each function it appears in.)
    MaFenetre.cpp:40: error: `FSOUND_Stream_Open' undeclared (first use this function)
    MaFenetre.cpp:42: error: `FSOUND_FREE' undeclared (first use this function)
    MaFenetre.cpp:42: error: `FSOUND_Stream_Play' undeclared (first use this function)
    mingw32-make[1]: *** [release\MaFenetre.o] Error 1
    mingw32-make[1]: Leaving directory `C:/Programmation/Qt'
    mingw32-make: *** [release] Error 2


    Voici mon code source

    main.cpp

    1. #include <QApplication>
    2. #include <FMOD/fmod.h>
    3. #include "MaFenetre.h"
    4. int main(int argc, char *argv[])
    5. {
    6.     QApplication app(argc, argv);
    7.     FSOUND_Init(44100, 32, 0);
    8.     MaFenetre fenetre;
    9.     fenetre.show();
    10.     FSOUND_Close();
    11.     return app.exec();
    12. }


    MaFenetre.cpp

    1. #include "MaFenetre.h"
    2. MaFenetre::MaFenetre() : QWidget()
    3. {
    4.     setFixedSize(350, 200);
    5.     m_boutonLecture = new QPushButton(this);
    6.     m_boutonLecture->setGeometry(10, 30, 100, 30);
    7.     m_boutonLecture->setText("Lecture");
    8.     m_boutonQuit = new QPushButton(this);
    9.     m_boutonQuit->setGeometry(10, 120, 100, 30);
    10.     m_boutonQuit->setText("Quiter");
    11.     m_boutonStop = new QPushButton(this);
    12.     m_boutonStop->setGeometry(120, 30, 100, 30);
    13.     m_boutonStop->setText("Stop");
    14.     m_boutonOuvrir = new QPushButton(this);
    15.     m_boutonOuvrir->setGeometry(230, 30, 100, 30);
    16.     m_boutonOuvrir->setText("Ouvrir");
    17.     QObject::connect(m_boutonQuit, SIGNAL(clicked()), qApp, SLOT(quit()));
    18.     QObject::connect(m_boutonOuvrir, SIGNAL(clicked()), this, SLOT(ouvrirDialogue()));
    19.     QObject::connect(m_boutonLecture, SIGNAL(clicked()), this, SLOT(lectureMusique(QString fichier)));
    20. }
    21. void MaFenetre::ouvrirDialogue()
    22. {
    23.     QString fichier = QFileDialog::getOpenFileName(this, "Ouvrir un fichier", QString(), "Fichier mp3 (*.mp3)");
    24.     QMessageBox::information(this, "Fichier", "Vous avez sélectionné :\n" + fichier);
    25. }
    26. void MaFenetre::lectureMusique(QString fichier)
    27. {
    28.      musique = FSOUND_Stream_Open(fichier, 0, 0, 0);
    29.      FSOUND_Stream_Play(FSOUND_FREE, musique);
    30. }


    MaFentre.h

    1. #ifndef DEF_MAFENETRE
    2. #define DEF_MAFENETRE
    3. #include <QApplication>
    4. #include <QWidget>
    5. #include <QPushButton>
    6. #include <QProgressBar>
    7. #include <QFileDialog>
    8. #include <QMessageBox>
    9. #include <QTranslator>
    10. #include <QLocale>
    11. #include <QLibraryInfo>
    12. #include <QSound>
    13. class MaFenetre : public QWidget
    14. {
    15.     Q_OBJECT
    16.     public:
    17.     MaFenetre();
    18.     public slots:
    19.     void ouvrirDialogue();
    20.     void lectureMusique(QString fichier);
    21.     private:
    22.     FSOUND_STREAM *musique;
    23.     QString fichier;
    24.     QPushButton *m_boutonLecture;
    25.     QPushButton *m_boutonQuit;
    26.     QPushButton *m_boutonStop;
    27.     QPushButton *m_boutonOuvrir;
    28. };
    29. #endif


    J'ai linké le .pro comme c'est expliqué ici et fmod est installé dans le répertoire mingw32 de Dev-C++ comme l'explique m@teo21 dans son tuto.
    Voilà si quelqu'un à une solution je suis preneur :)
    • Partager sur Facebook
    • Partager sur Twitter
      20 mars 2008 à 23:15:55

      Tu as tout simplement une erreur dans tes includes !
      Deux options :
      a) Tu "remontes" l'include <FMOD/fmod.h> depuis MaFenetre.cpp dans MaFenetre.h

      b) Tu utilises le principe de la declaration forward :
      MaFenetre.h
      1. // #include ...
      2. struct FMOD_STREAM; // Notre declaration forward.
      3. class MaFenetre
      4. ...

      Et ca marche. Attention, ce genre de déclaration ne marche que si tu as un pointeur ou une référence dans le header, et que tu ne te sers pas de la classe / structure en question.

      Et attention à bien inclure <FMOD/fmod.h> dans MaFenetre.cpp : car ici, tu te sers des fonctions de FMOD !

      En espérant que cela ait résolu ton problème,
      G.csk
      • Partager sur Facebook
      • Partager sur Twitter
        21 mars 2008 à 19:30:51

        j'ai mis l'include de fmod dans mon .h mais sa ne marche pas. Je crois qu'il s'agit de fmod que j'ai mal linké. Quelqu'un pourrai me mettre la manipulation complète ?
        • Partager sur Facebook
        • Partager sur Twitter

        [Qt] problème lors qu make avec FMOD

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown