cs_Virus721
Messages postés6Date d'inscriptionlundi 17 décembre 2007StatutMembreDernière intervention 5 février 2011
-
5 févr. 2011 à 16:15
cs_Virus721
Messages postés6Date d'inscriptionlundi 17 décembre 2007StatutMembreDernière intervention 5 février 2011
-
5 févr. 2011 à 20:16
Salut tout le monde !
Voila j'essaye de coder un petit "music player" en C++ avec Qt pour la GUI, et IrrKlang pour l'audio. J'ai lu et revérifié 50 fois mon code, mais je ne trouve pas l'erreur, ca me rend fou !
Le compilateur me dit :
virus721@area721m:~/Workspace/qt/music_player$ g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -lIrrKlang -I /usr/include/irrklang -o main.o main.cxx
In file included from MP_MusicPlayer.h:4,
from main.cxx:3:
MP_GUInterface.h:20: error: ISO C++ forbids declaration of ‘MP_MusicPlayer’ with no type
MP_GUInterface.h:20: error: expected ‘;’ before ‘*’ token
MP_GUInterface.h:36: error: expected ‘)’ before ‘*’ token
In file included from MP_MusicPlayer.h:5,
from main.cxx:3:
MP_AudioEngine.h:18: error: ISO C++ forbids declaration of ‘MP_MusicPlayer’ with no type
MP_AudioEngine.h:18: error: expected ‘;’ before ‘*’ token
MP_AudioEngine.h:24: error: expected ‘)’ before ‘*’ token
In file included from MP_MusicPlayer.h:6,
from main.cxx:3:
MP_PlayListMgr.h:20: error: expected ‘)’ before ‘*’ token
main.cxx: In function ‘int main(int, char**)’:
main.cxx:12: error: request for member ‘Start’ in ‘musicPlayer’, which is of non-class type ‘nsMusicPlayer::MP_MusicPlayer()’
Mon programme compte les fichiers suivants :
main.cxx
MP_MusicPlayer.h / cxx
(objet contenant un pointeur vers les elements du music player : l'interface, le moteur audio, et le gestionnaire de playlists)
MP_GUInterface.h / cxx
(objet constituant l'interface graphique,. Cet objet demande au moteur audio de jouer, mettre en pause ou stopper le morceau de musique en cours. Si il faut changer de morceau de musique, il demande d'abord au gestionnaire de playlist le nouveau morceau a jouer avant de demander au moteur audio de le jouer,)
MP_AudioEngine.h / cxx
(objet contenant un pointeur vers un moteur audio de IrrKlang. Cet objet ne fait que lire, mettre en pause ou arreter le morceaux qu'on lui envoie)
MP_PlayListMgr.h / cxx
(objet stockant le morceau et la playlist en cours)
MP_PlayList.h
(objet représentant un playlist (un ensemble de MP_Tracks), pas encore codé)
MP_Track.h
(objet représentant un mocreau de musique (nom, auteur, chemin du fichier etc), pas encore codé).
Chacon des trois objets principaux contient un pointeur vers le "MP_MusicPlayer" qui les "contient". Je sais plus trop pour quoi j'ai mis les choses de cette manières mais bon je doute que le probleme vienne de la :P
Voici les codes sources (ils ne sont pas longs) :
main.cxx :
#include <QApplication>
#include "MP_MusicPlayer.h"
using namespace nsMusicPlayer;
int main (int argc, char * argv[])
{
QApplication app (argc, argv);
cs_Lucky92
Messages postés180Date d'inscriptionmercredi 22 décembre 2004StatutMembreDernière intervention16 août 20122 5 févr. 2011 à 18:02
Salut,
tes problèmes de compilation viennent des dépendances mutuelles de certains de tes includes.
Par exemple MusicPlayer.h et GUInterface.h.
Pour résoudre ton problème, il faut simplement que tu fasses les inclusions dans les fichiers .cxx et que tu fasses des "forward declaration" dans les headers.
cs_Virus721
Messages postés6Date d'inscriptionlundi 17 décembre 2007StatutMembreDernière intervention 5 février 2011 5 févr. 2011 à 19:12
Merci ça a résolu mes problèmes !
Par contre je me demande, si je remplace toutes les inclusions par des foward declarations, ca ne marchera que pour les classes, qu'en est-il des eums, des typesdefs et autres ? Peut on aussi les forward déclarer ?
Par contre la toute dernière erreur du compilateur est toujours la ! Je ne sais pas de quoi ca vient, la fonction est déclarée et implémentée comme il faut, mais l'appeler pose problème ! Saurais tu comment faire ? Merci d'avance :)