Bonjour,
Je travaille actuellement sur un projet pour une gestion de l'audio simplifiée
J'aimerais stocker des sf::Music dans un std::map
Mais le problème est que je n'arrive pas à initialiser la musique directement dans le std::map...
Voilà un exemple qui sera bien plus clair :
std::map<std::string,sf::Music> mMusics;
/*
Le fait que sf::Music soit NonCopyable m'empêche de faire ceci :
sf::Music a;
mMusics.at(filename) = a;
*/
if(!mMusics.at(filename).openFromFile(filename))
return false;
mMusics.at(filename).play();
Voilà, je recherche s'il en existe, une façon de faire :)
Eh bien je pensais aussi au départ mais apparement nan...
Je crois que mon sf::Music a besoin d'être initialisé...
Voici l'erreur retournée :
terminate called after throwing an instance of 'std::out_of_range'
what(): map::at
Bonjour
La méthode .at() de std::map, permet uniquement d'accéder à l'élément.
Si l'élément n'existe pas, tu reçois une exception std::out_of_range.
Si tu veux créer un élément, tu utilises la méthode .emplace(), .insert() ou tout simplement l'opérateur [].
mMusics[filename]; // Création de la musique
Ensuite tu peux y accéder avec la méthode .at() comme dans le reste de ton programme.