Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1239 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  les classes, les structures, et les .h ???

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

les classes, les structures, et les .h ???

n°1034665
Binoi
Posté le 04-04-2005 à 19:06:38  profilanswer
 

 
Bonjour,  
 
je débute en C++ ... alors d'avance pardon... :sarcastic:  
 
J'ai une classe Musique placée dans le fichier musique.cpp, dans lequel il y a le corps des méthodes
ex :  
void Musique::lecture() {
     fm->lecture();
}  
 
J'ai un fichier musique.h dans lequel j'ai mis :
class Musique
{
private:
 int module;
 FMUSIC_MODULE *fm;
 FSOUND_SAMPLE *fs;  
 void extension();
public:
 Musique();
        /* etc... */
};
 
Le problème c'est que ma classe utilise un structure placé dans le fichier fmod.h
Quand j'inclus le point fmod.h dans l'un ou dans l'autre de ces deux fichiers, le compilateur dit :
" [... ] musique.cpp: In member function `void Musique::lecture()':
musique.cpp:107: error: invalid use of undefined type `struct FMUSIC_MODULE'
fmod.h:48: error: forward declaration of `struct FMUSIC_MODULE' [...]"
 
Ou dois-je inclure fmod.h pour qu'il le reconnaise ???  :bounce:  
 
Merci d'avance pour vos réponses  :)

mood
Publicité
Posté le 04-04-2005 à 19:06:38  profilanswer
 

n°1034709
Joel F
Real men use unique_ptr
Posté le 04-04-2005 à 19:58:14  profilanswer
 

avant la declaration de ta classe.

n°1034748
Binoi
Posté le 04-04-2005 à 20:28:25  profilanswer
 

J'ai déjà essayé, mais ça ne change rien...
J'ai toujours le meme message d'erreur.

n°1035068
LordHarryP​otter
Posté le 04-04-2005 à 23:14:02  profilanswer
 

heu je sais pas si çà peu t'aider mais pour éviter d'inclure plusieur fois les fichier .h il faut que tu mette en début de tes fichiers . h la directivre #pragma once ou alors :
 
#ifndef _MONFICHIER_H_MESINITIAL_
#define _MONFICHIER_H_MESINITIAL_
 
// ton fichier
 
#endif
 
Sinon je comprend pas très bien l'enchainement de tes .h :s désolé

n°1036327
Binoi
Posté le 05-04-2005 à 19:45:46  profilanswer
 

J'ai essayé ta solution mais ça en fonctionne toujours pas  :??:  
 
En fait, histoire de résumé ce que je veux faire : :D  
 
c'est utiliser une structure qui est defini dans un fichier a.h,  
dans une classe défini dans un fichier b.h. Les fonctions de ma classe sont définies dans un fichier c.cpp
 
Alors comment faire pour que le classe connaise la structure défini dans le fichier a.h ???  :sarcastic:


Message édité par Binoi le 05-04-2005 à 19:47:32
n°1036331
IrmatDen
Posté le 05-04-2005 à 19:51:16  profilanswer
 

tu mets #include "a.h" en haut de b.h ...

n°1036339
Joel F
Real men use unique_ptr
Posté le 05-04-2005 à 19:54:55  profilanswer
 

deja dis monsieur :o
mais c'est pas ça dixit binoi :o

n°1036364
IrmatDen
Posté le 05-04-2005 à 20:06:18  profilanswer
 

Monsieur, ;)
Tu peux nous mettre les premieres lignes de musique.h et musique.cpp stp ?

n°1036369
Binoi
Posté le 05-04-2005 à 20:10:02  profilanswer
 

Joel F a écrit :

deja dis monsieur :o
mais c'est pas ça dixit binoi :o


 
J'ai déjà fait ça !  
Mais ça marche pas  ;)  
 
J'ai toujours des erreus dans mon fichiers c.cpp  
(j'ai mis #include "b.h" dans c.cpp)  :pt1cable:

n°1036384
Binoi
Posté le 05-04-2005 à 20:14:32  profilanswer
 

IrmatDen a écrit :

Monsieur, ;)
Tu peux nous mettre les premieres lignes de musique.h et musique.cpp stp ?


 
 
/************************** musique.h *******************************/
 
#include <string.h>
#include "../api/inc/wincompat.h"
#include "../api/inc/fmod.h"
#include "../api/inc/fmod_errors.h"  
 
#ifndef _MONFICHIER_H_MUSIQUE_
#define _MONFICHIER_H_MUSIQUE_
class Musique
{
private:
 char * acces;
 int module; /* 1=FMUSIC 2=FSOUND 3=SDL*/
 FMUSIC_MODULE *fm;
 FSOUND_SAMPLE *fs;  
 void extension();
public:
 Musique();
 void setAcces(const char * chemin);
 char * initialisation();
 char * lecture(const char * acces);
 void arret();
 void pause();
 void volume (int vol);
 void avanceRapide();
 void retourRapide();
 bool estFini();
};
#endif
 
 
/********************* Musique.cpp *************************/  
 
#include "musique.h"
 
void Musique::extension()
{
 [...]
}
 
Musique::Musique()
{
 fm = NULL;
 fs = NULL;
}
void Musique::setAcces(const char * chemin)
{
 [...]
}
char * Musique::initialisation()
{
 [...]
}
char * Musique::lecture(const char * acces)
{
 [...]
}
 
[...]


Message édité par Binoi le 05-04-2005 à 20:15:36
mood
Publicité
Posté le 05-04-2005 à 20:14:32  profilanswer
 

n°1036394
IrmatDen
Posté le 05-04-2005 à 20:24:57  profilanswer
 

et la sortie complete du compileur pour musique.cpp ?
Sinon, je pense pas que ça résolve ton problème, mais les include tu devrais les faire apres ton #ifndef ... #define ...

n°1036399
Binoi
Posté le 05-04-2005 à 20:29:44  profilanswer
 

Voilà ce que me dit la sale bete de compilateur !!!  
 
g++    -c -o main.o main.cpp
g++    -c -o musique.o musique.cpp
musique.cpp: In member function `char* Musique::initialisation()':
musique.cpp:97: error: invalid use of undefined type `struct FMUSIC_MODULE'
../api/inc/fmod.h:48: error: forward declaration of `struct FMUSIC_MODULE'
musique.cpp:100: error: invalid use of undefined type `struct FSOUND_SAMPLE'
../api/inc/fmod.h:44: error: forward declaration of `struct FSOUND_SAMPLE'
musique.cpp: In member function `char* Musique::lecture(const char*)':
musique.cpp:110: error: invalid use of undefined type `struct FMUSIC_MODULE'
../api/inc/fmod.h:48: error: forward declaration of `struct FMUSIC_MODULE'
musique.cpp:112: error: invalid use of undefined type `struct FSOUND_SAMPLE'
../api/inc/fmod.h:44: error: forward declaration of `struct FSOUND_SAMPLE'
[...]
make: *** [musique.o] Erreur 1

n°1036438
IrmatDen
Posté le 05-04-2005 à 21:15:17  profilanswer
 

tu peux me faire un copier/coller de musique.h et musique.cpp en MP stp  que j'y jette un oeil ?


Message édité par IrmatDen le 05-04-2005 à 21:32:13
n°1036521
IrmatDen
Posté le 05-04-2005 à 22:37:05  profilanswer
 

oki, on était très loin du problème là !!
La librairie FMOD ne s'utilise absolument pas de cette façon. Regarde dans FMOD/samples/simple/Main.cpp, analyse un peu le fonctionnement de la librairie en regardant la doc pour chacune des fonctions... Si tu as besoin d'un éclaircissement, n'hésite pas... même si je pourrais pas t'aider énormément, vu que je connais pas cette lib.

n°1036780
Binoi
Posté le 06-04-2005 à 09:22:05  profilanswer
 

Justement, j'ai réussi à utiliser FMOD avec le compilateur gcc dans un exemple tout simple. Mais moi, ce que je voudrais, c'est pouvoir l'utiliser via une classe...

n°1038136
IrmatDen
Posté le 06-04-2005 à 21:44:21  profilanswer
 

Salut,
 
On va voir quelques erreurs ensemble alors :
 

Code :
  1. musique.cpp:59: error: invalid use of undefined type `struct FMUSIC_MODULE'


la dite ligne dans musique.cpp : fm = new FMUSIC_MODULE;
l'utilisation correcte : fm = FMUSIC_LoadSong("mamusique.mod" );
en vérifiant que fm est bien alloué, sinon tu signales une erreur à l'utilisateur de la classe.
 

Code :
  1. musique.cpp:62: error: invalid use of undefined type `struct FSOUND_SAMPLE'


Même erreur...
la dite ligne dans musique.cpp : fs = new FSOUND_SAMPLE;
l'utilisation correcte : fs = FSOUND_Sample_Load(FSOUND_UNMANAGED, "monson.wav", FSOUND_NORMAL, 0, 0);
en vérifiant que fs est bien alloué, sinon tu signales une erreur à l'utilisateur de la classe.
 

Code :
  1. musique.cpp:72: error: invalid use of undefined type `struct FMUSIC_MODULE'


ce que tu fais : return(fm->lecture());
Où as vu que FMOD étais développé en C++ et possédait un membre lecture() ??
Pour lancer la lecture d'un FMUSIC_MODULE, il faut : FMUSIC_PlaySong(fm); en ayant pris soin d'ajuster ton volume...
 
etc, etc...
 
Sinon pour la façon dont tu as l'air de développer ta classe, tu ne pourras jamais jouer plus d'une musique et plus d'un son à la fois. Tu aurais plus à gagner en créant au minimum 3 classes, genre:
- FMODSystem : classe servant à initialiser le système FMOD (i.e. version, sortie, memory system, erreurs, drivers...),
- FMODMusic : classe servant à gérer tout ce qui concerne les FMUSIC_MODULE,
- FMODSound : classe servant à gérer tout ce qui concerne les FSOUND_SAMPLE.
En prenant soin de faire des destructeurs pour tes classes pour bien nettoyer ton système parce que dans ton code il n'y avait pas ça :

Code :
  1. FSOUND_Sample_Free(fs);
  2. FMUSIC_FreeSong(fm);
  3. FSOUND_Close();


 
voili voilou, amuse toi bien ;)
 
PS: une dernière chose, laisse tomber tes char* et utilises des string, c'est bien plus simple à manipuler.

n°1039291
Binoi
Posté le 07-04-2005 à 19:45:07  profilanswer
 

Un grand merci pour ta réponse !!!!  :)  
 
J'ai bien compris mon problème.
J'avais déjà utilisé FMOD en C
mais là j'intègre tout ça dans une interface graphique donc, je me suis mis au C++ et à l'implementation des classes...
 
Mais donc, du coup ça risque de compliqué mon affaire.  
Je voulais décomposer les fonctions de la FMOD au travers de classes. Du coup, j'ai crée une classe Musique, dans laquelle il y a un objet de type FMUSIC et FSOUND (FMOD se décompose en 2 grande parties en fonctions du type du fichier lu mp3, s3m, etc).
J'ai donc crée des classes pour FMUSIC et FSOUND qui font appel à leur fonction respective dans la librairie FMOD.
Enfin bref, c'est un beau bordel.  :D  
 
C'est pas gagné...  :sarcastic:  
 

n°1039326
IrmatDen
Posté le 07-04-2005 à 20:13:41  profilanswer
 

Si tu commences tout juste en C++, alors il vaudrait peut-être mieux te pencher sur un bouquin ou un bon tuto. Comme ça, ton systeme de gestion de son sera bien orienté objet et en connaissance de cause...
Ca promet quelques belles nuits blanches ;)

n°1039335
Binoi
Posté le 07-04-2005 à 20:22:33  profilanswer
 

IrmatDen a écrit :

Si tu commences tout juste en C++, alors il vaudrait peut-être mieux te pencher sur un bouquin ou un bon tuto. Comme ça, ton systeme de gestion de son sera bien orienté objet et en connaissance de cause...
Ca promet quelques belles nuits blanches ;)


 
Et moi qui aime dormir....  :sleep:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  les classes, les structures, et les .h ???

 

Sujets relatifs
strcmp entre 2 structuresAffichage du diagramme des classes sous NetBeans.
Qui a un prgramme c++ avec des classes ?[PHP] Question à propos des classes
[resolu]petit pb de structures...[C/C++] Toujours les structures / Accès direct
[C/C++] Lecture de structures en C++ ? Nouvelles questions >Question de synchronisation pour des classes différentes
DLL et destructeur de classes[VB] structures et classes
Plus de sujets relatifs à : les classes, les structures, et les .h ???


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR