2009-07-10 3 views
0

Je sais que je pourrais juste rendre tous les Mix_Musics publics, et ne pas s'inquiéter du problème, mais je voudrais quand même comprendre comment faire il.J'essaie de retourner un type de données SDL Mix_Music, mais j'ai des problèmes

//header.h 

    class Music 
    { 
     private: 

      Mix_Music * BGMusic, * fall, * reset, * teleport, * win, * singleCubeWin; 

     public: 

      Music(); 

      bool loadMusic(); 
      void clean_up(); 

      Mix_Music * getSound(Mix_Music * m) { return m; } 
    }; 


    //program.cpp 

    Music Sound; 

    int main(int argc, char* args[]) 
    { 
     ... 

     Mix_PlayMusic(Sound.getSound("BGMusic"), -1); 

     ... 
    } 

Répondre

1

De votre code ci-dessus, je ne suis pas absolument certain de ce que vous essayez de faire. La fonction 'getSound' prend un objet Mix_Music comme paramètre et renvoie le même objet. Maintenant, à partir d'une déduction, je suppose que vous essayez de demander l'objet BGMusic via une chaîne. Il a quelques façons de faire, par ID pour chacun des objets Mix_Music, demande ID .:

... // Somewhere above: 

enum MixMusicID { 
    BGMUSIC, 
    FALL, 
    RESET, 
    TELEPORT, 
    WIN, 
    SINGLECUBEWIN 
}; 

... // In the class: 

Mix_Music * getMusic (MixMusicID id) 
{ 
    switch (id) 
    { 
    case BGMUSIC: 
     return BGMusic; 
     ... 
    default: 
     return NULL; 
    } 
} 

... // In main: 
Mix_PlayMusic(Sound.getSound(BGMUSIC), -1); 

Vous pouvez faire de même avec les identificateurs de chaîne pour chaque objet. Ce qu'il faut vraiment, c'est qu'il n'y a pas de relation construite entre le nom d'une variable et un identificateur de chaîne. Donc, c'est à vous de mettre en œuvre cette relation soit via un enum (ci-dessus) ou des identificateurs de chaîne.

J'espère que cela a aidé, encore une fois je ne sais pas exactement ce que la question était.

+0

Ouais, c'est ce que j'essayais de faire est de demander un son par son nom (chaîne), et que la fonction renvoie ce son. Je vais essayer cette énumération, mais je n'ai jamais utilisé enum. Où est-ce que je mets ça? En main()? – Justen

+0

Très bien, j'ai ajouté enum aux déclarations publiques de la classe Music, et quand j'essaie Mix_PlayMusic (Sound.getSound (BGMUSIC), -1); à partir de la principale, il est dit que BGMUSIC est un identificateur non déclaré – Justen

+0

Nevermind, je viens de le mettre au-dessus de la classe Music en haut du fichier d'en-tête (l'enum), et cela fonctionne. Merci pour l'aide. – Justen

Questions connexes