2009-07-10 2 views
0

모든 Mix_Musics를 공용으로 만들 수 있으며 문제에 대해 걱정할 필요가 없지만 여전히 수행 방법을 알고 싶습니다. 그것.SDL Mix_Music 데이터 형식을 반환하려고하는데 문제가 발생했습니다.

//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); 

     ... 
    } 

답변

1

위의 코드에서 나는 당신이하려는 일을 절대 확신하지 못했습니다. 함수 'getSound'는 Mix_Music 객체를 매개 변수로 사용하여 동일한 객체를 반환합니다. 이제 약간의 공제에서 문자열을 통해 BGMusic 객체를 요청하려고한다고 가정합니다. 몇 가지 방법은 ID에 의해 Mix_Music 객체, 요청의 각 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); 

는 각 객체의 문자열 식별자와 유사 그것을 할 수 있습니다. 실제로 변수의 이름과 문자열 식별자 사이에 관계가 구축되어 있지 않습니다. 따라서 열거 형 (위) 또는 문자열 식별자를 통해이 관계를 구현할 수 있습니다.

호프가 도움이되었으므로 다시 질문을 정확히 이해하지 못했습니다.

+0

그래, 내가 한 일은 그 이름 (문자열)으로 사운드를 요청하고, 그 사운드를 반환하는 기능을 갖도록하려는 것이다. 그 열거 형을 사용해 보겠다.하지만 나는 열거 형을 사용한 적이 없다. 어디서 그걸 넣을 수 있니? main()에? – Justen

+0

괜찮 았어, 나는 클래스 클래스의 public 선언에 enum을 추가했고, Mix_PlayMusic (Sound.getSound (BGMUSIC), -1)을 시도했을 때; main에서 BGMUSIC이 선언되지 않은 식별자라고합니다. – Justen

+0

Nevermind, 헤더 파일 (열거 형)의 맨 위에있는 Music 클래스 위에 놓으면됩니다. 도와 주셔서 감사합니다. – Justen

관련 문제