IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Probl�me conteneur map


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Membre confirm� Avatar de trecks
    �tudiant
    Inscrit en
    Janvier 2007
    Messages
    91
    D�tails du profil
    Informations personnelles :
    �ge : 38

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 91
    Par d�faut Probl�me conteneur map
    Bonjour � tous. Voila j'ai une erreur de compilation sur ce code mais je sais pas pourquoi :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #ifndef __ISoundType_H__
    #define __ISoundType_H__
     
    #include <map>
    #include <string>
    #include "SLEType.h"
     
    namespace SLE
    {
    	namespace Audio
    	{
    		//Classe abstraite pour la gestion des sons
    		template<typename T>
    		class ISoundType
    		{
    		public:
                            ISoundType(){}
    			virtual ~ISoundType(){}
     
    			//Enregistre un son dans le conteneur
    			virtual void registerSound(std::string strPath, std::string strName) = 0;
     
    			//Supprime un son spécifié en paramètre du conteneur
    			virtual void deleteSound(std::string strName) = 0;
     
    			//Lit le son spécifié en paramètre
    			virtual void playSound(std::string strName) = 0;
     
    			//Stop le son spécifié en paramètre
    			virtual void stopSound(std::string strName) = 0;
     
    			//Met en pause le son spécifié en paramètre
    			virtual void pauseSound(std::string strName) = 0;
     
    			//Modifie le volume du son
    			virtual void setSoundVolume(uint iVolume) = 0;
     
    		protected:
    			//Conteneur des sons
    			std::map<std::string, T*> m_sound;
    			//Itérateur pour le parcours du conteneur
    			std::map<std::string, T*>::iterator m_soundIter;
    		};
    	}
    }
     
    #endif
    Mon compilateur m'indique que l'erreur ce trouve sur la d�claration de l'it�rateur du conteneur map.
    Help me please!!!

    PS : voici un lien vers les erreurs si vous vous sentez le courage de tous lire http://rafb.net/p/bqXMFh99.html

  2. #2
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    Et si tu rajoutes le mot-cl� typename ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre �m�rite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    D�tails du profil
    Informations personnelles :
    �ge : 38
    Localisation : France, Rh�ne (Rh�ne Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par d�faut
    D'ailleurs, tu devrais prendre tous tes param�tres de type std::string par r�f�rence constante aussi.

  4. #4
    Membre confirm� Avatar de trecks
    �tudiant
    Inscrit en
    Janvier 2007
    Messages
    91
    D�tails du profil
    Informations personnelles :
    �ge : 38

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 91
    Par d�faut
    Oui j'ai d�ja vu les param�tres std::string par r�f�rences constantes. Mais qu'est ce que cela apporte de plus??

    Sinon j'ai rajout� typename devant la d�claration de mes 2 conteneurs map seulement je comprend pas pourquoi je dois faire �a.

  5. #5
    Expert �minent
    Avatar de M�dinoc
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 397
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 41
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 397
    Par d�faut
    �a supprime des copies inutiles (je ne pense pas que std::string fasse du copy-on-write sur ta plate-forme).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parl� avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre confirm� Avatar de trecks
    �tudiant
    Inscrit en
    Janvier 2007
    Messages
    91
    D�tails du profil
    Informations personnelles :
    �ge : 38

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 91
    Par d�faut
    Dans ce cas si �a permet de supprimer des copies inutiles il faudrait le faire pour tous les param�tres.
    En fait la source que je vous est montr� fait parti du moteur de jeu 2D que j'essaie de coder, et normalement je dois pr�senter ce moteur � mon BTS en tant qu'activit� objet, le probl�me c'est que si l'examinateur voit que j'ai pass� ces std::string par r�f�rence il va me tuer vu que pour lui, quand on passe une variable par r�f�rence c'est qu'on a l'intention de la modifier. Voila si vous pouviez m'�clairer...

  7. #7
    Membre confirm� Avatar de trecks
    �tudiant
    Inscrit en
    Janvier 2007
    Messages
    91
    D�tails du profil
    Informations personnelles :
    �ge : 38

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 91
    Par d�faut
    ba en fait ca marche pas
    dans mon logger il me dit que je peux pas charger le son
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    #ifndef __ISoundType_H__
    #define __ISoundType_H__
     
    #include <map>
    #include <string>
    #include "SLEType.h"
     
    namespace SLE
    {
    	namespace Audio
    	{
    		//Classe abstraite pour la gestion des sons
    		template<typename T>
    		class ISoundType
    		{
    		public:
    			ISoundType(){}
    			virtual ~ISoundType(){}
     
    			//Enregistre un son dans le conteneur
    			virtual void registerSound(const std::string &strPath, const std::string &strName) = 0;
     
    			//Supprime un son spécifié en paramètre du conteneur
    			virtual void deleteSound(const std::string &strName) = 0;
     
    			//Lit le son spécifié en paramètre
    			virtual void playSound(const std::string &strName) = 0;
     
    			//Stop le son spécifié en paramètre
    			virtual void stopSound(const std::string &strName) = 0;
     
    			//Met en pause le son spécifié en paramètre
    			virtual void pauseSound(const std::string &strName) = 0;
     
    			//Modifie le volume du son
    			virtual void setSoundVolume(uint iVolume) = 0;
     
    		protected:
    			//Conteneur des sons
    			typename std::map<std::string, T*> m_sound;
    			//Itérateur pour le parcours du conteneur
    			typename std::map<std::string, T*>::iterator m_soundIter;
    		};
    	}
    }
     
    #endif
    voici le code de la classe abstraite ISoundType

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #ifndef __CStreamManager_H__
    #define __CStreamManager_H__
     
    #include <FMOD/fmod.h>
    #include "ISingleton.h"
    #include "ISoundType.h"
     
    namespace SLE
    {
    	namespace Audio
    	{
    		class CStreamManager : public ISoundType<FSOUND_STREAM>, public ISingleton<CStreamManager>
    		{
    			friend class ISingleton<CStreamManager>;
     
    		public:
    			void registerSound(const std::string &strPath, const std::string &strName);
     
    			void deleteSound(const std::string &strName);
     
    			void playSound(const std::string &strName);
     
    			void stopSound(const std::string &strName);
     
    			void pauseSound(const std::string &strName);
     
    			void setSoundVolume(uint iVolume);
     
    		private:
    			CStreamManager();
    			virtual ~CStreamManager();
    		};
    	}
    }
     
    #endif
    ca c'est le code de CStreamManager.h

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    #include "CStreamManager.h"
    #include "CInternalLogger.h"
     
    using namespace SLE;
    using namespace Audio;
     
    CStreamManager::CStreamManager()
    {}
     
    CStreamManager::~CStreamManager()
    {
    	m_soundIter = m_sound.begin();
    	for(m_soundIter; m_soundIter != m_sound.end(); m_soundIter++)
    	{
    		//FSOUND_Stream_Close(m_soundIter->second());
    		m_sound.erase(m_soundIter);
    	}
    }
     
    void CStreamManager::registerSound(const std::string &strPath, const std::string &strName)
    {
    	m_sound[strName] = FSOUND_Stream_Open(strPath.c_str(), FSOUND_LOOP_NORMAL, 0, 0);
    	if(!m_sound[strName])
    		CInternalLogger::getInstance()->logToFile("Impossible de charger en mémoire le son : ");
    }
     
    void CStreamManager::deleteSound(const std::string &strName)
    {
    	FSOUND_Stream_Close(m_sound[strName]);
    	m_sound.erase(strName);
    }
     
    void CStreamManager::playSound(const std::string &strName)
    {
    	//Si la chanson est en pause
    	if(FSOUND_GetPaused(1))
    	{
    		if(!FSOUND_SetPaused(1, 0)) // On enlève la pause
    			CInternalLogger::getInstance()->logToFile("Impossible de lire le son : mise en pause");
    	}
    	//Sinon on la lit
    	else
    	{
    		if(!FSOUND_Stream_Play(FSOUND_FREE, m_sound[strName]))
    			CInternalLogger::getInstance()->logToFile("Impossible de lire le son : ");
    	}
    }
     
    void CStreamManager::stopSound(const std::string &strName)
    {
    	if(!FSOUND_Stream_Stop(m_sound[strName]))
    		CInternalLogger::getInstance()->logToFile("Impossible d'arrêter le son : ");
    }
     
    void CStreamManager::pauseSound(const std::string &strName)
    {
    	if (!FSOUND_GetPaused(1)) // Si la chanson n'est en pause
    	{
    		if(!FSOUND_SetPaused(FSOUND_ALL, 1)) // On met en pause
    			CInternalLogger::getInstance()->logToFile("Impossible de mettre en pause le son : ");
    	}
    }
     
    void CStreamManager::setSoundVolume(uint iVolume)
    {
    	if(!FSOUND_SetVolume(FSOUND_ALL, iVolume))
    		CInternalLogger::getInstance()->logToFile("Impossible d'ajuster le volume sonore pour les sons de type stream");
    }
    la le code du cpp

    et dans le main
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    #include <iostream>
    #include "SLE.h"
     
    using namespace SLE;
    using namespace Audio;
     
    int main(int argc, char **argv)
    {
    	CSLEngine *_pEngine = CSLEngine::getInstance();
     
    	CStreamManager *_pStreamManager = CStreamManager::getInstance();
     
    	_pStreamManager->registerSound("Hypnotise.mp3", "Hypnotise");
     
    	_pStreamManager->playSound("Hypnotise");
     
    	_pEngine->createVideoMode(800, 600, 32, false, "SLEngine v0.1 - Test", 4);
     
    	while(_pEngine->isRunning())
    	{
    		_pEngine->beginScene(true, true, true, 0, 0, 0, 0);
     
    		_pEngine->onEvent();
     
    		_pEngine->renderScene();
     
    		_pEngine->endScene();
    	}
     
    	_pEngine->killInstance();
     
     
    	return EXIT_SUCCESS;
    }
    et avec tout ca dans mon logger il me dit "impossible de charger le son" : je pense que ca vient du conteneur map de la classe ISoundType, j'ai rajout� typename devant mais je sais pas si la synthaxe est r��lement correcte, en tout cas mon compilateur lance correctement l'appli mais ne charge pas le son!

  8. #8
    Membre �prouv�
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    D�tails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Par d�faut
    Il me parait clair que ce test renvoie vrai, donc que la fonction FSOUND_Stream_Open a renvoy� un pointeur nul juste avant.
    Le premier typename pour d�clarer ta map est inutile, le second est obligatoire parce que dans ce contexte le compilateur n'arrive pas � savoir si iterator designe un type ou une variable. Regarde bien la FAQ C++ section Templates, c'est expliqu�.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    protected:
      //Conteneur des sons
      typename std::map<std::string, T*> m_sound;
      //Itérateur pour le parcours du conteneur
      typename std::map<std::string, T*>::iterator m_soundIter;
    Par contre d'habitude, j'ai plut�t tendance � faire �a (plus joli et pratique) :

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    public:
      typedef std::map<std::string, T*> SoundMap;
     
    protected:
      //Conteneur des sons
      SoundMap m_sound;
      //Itérateur pour le parcours du conteneur
      typename SoundMap::iterator m_soundIter;
    Je souligne qu'il est assez rare d'avoir un iterateur comme membre de classe. C'est assez dangereux car apr�s certaines op�rations sur la map (insertions ou suppressions je ne sais plus trop) il peut devenir invalide et son acces provoque une erreur.

    Derni�re remarque, une map avec comme clef std::string est tr�s pratique pour l'utilisateur, mais r�duit pas mal les perfs car il y a comparaison de chaque (au pire) caract�res, mais ce n'est peut-�tre pas important dans ton cas.

  9. #9
    Membre confirm� Avatar de trecks
    �tudiant
    Inscrit en
    Janvier 2007
    Messages
    91
    D�tails du profil
    Informations personnelles :
    �ge : 38

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 91
    Par d�faut
    Merci NiamorH, en effet c'est plus clair et j'ai aussi d�placer l'it�rateur pour le mettre dans chaque classe d�riv�e, par contre mon probl�me est toujours le m�me, mon logger m'indique que le son n'a pas �t� charg� et ne peux pas �tre lu (dans le main)

  10. #10
    Membre Expert

    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 294
    D�tails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 294
    Par d�faut
    Salut,

    Citation Envoy� par trecks Voir le message
    mon logger m'indique que le son n'a pas �t� charg� et ne peux pas �tre lu (dans le main)
    Ca n'a vraisemblablement aucun rapport avec la std::map, je verrais plus l'appel � FSOUND_Stream_Open qui �choue.

    MAT.

  11. #11
    Membre confirm� Avatar de trecks
    �tudiant
    Inscrit en
    Janvier 2007
    Messages
    91
    D�tails du profil
    Informations personnelles :
    �ge : 38

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 91
    Par d�faut
    salut, bon en fait j'ai trouv� la solution, vous allez surement bien vous marrez, j'avais juste oubli� d'initialiser FMOD, c'est pour �a que mon logger m'indique toujours des erreurs.

    Merci � tout le monde pour votre aide.
    @+

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. [IBATIS/mysql] probl�me de mapping
    Par iftolotfi dans le forum Persistance des donn�es
    R�ponses: 3
    Dernier message: 07/07/2006, 10h40
  2. [D�butant] Probl�me de mapping des ports
    Par zehle dans le forum VHDL
    R�ponses: 1
    Dernier message: 22/05/2006, 22h37
  3. [PERL] Probl�me avec map
    Par LE NEINDRE dans le forum Langage
    R�ponses: 9
    Dernier message: 05/10/2005, 09h48
  4. [CASTOR]Probl�me de mapping de donn�es
    Par chuck norris dans le forum Persistance des donn�es
    R�ponses: 1
    Dernier message: 13/07/2005, 22h01
  5. [Struts] Probl�me de mapping
    Par ArseNic dans le forum Struts 1
    R�ponses: 5
    Dernier message: 10/02/2005, 10h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo