Я пытаюсь вернуть тип данных SDL Mix_Music, но у меня проблемы - PullRequest
0 голосов
/ 10 июля 2009

Я знаю, что могу просто обнародовать все Mix_Musics и не беспокоиться о проблеме, но я все же хотел бы понять, как это сделать.

   //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 Ответ

1 голос
/ 10 июля 2009

Из вашего кода выше я не совсем уверен, что вы пытаетесь сделать. Функция 'getSound' принимает объект Mix_Music в качестве параметра и возвращает тот же объект. Теперь из некоторого вывода я предполагаю, что вы пытаетесь запросить объект BGMusic через строку. Есть несколько способов сделать это, используя идентификаторы для каждого из объектов Mix_Music, запрос по идентификатору .:

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

Вы можете сделать это аналогично со строковыми идентификаторами для каждого объекта. На самом деле все сводится к тому, что между именем переменной и строковым идентификатором нет встроенной связи. Таким образом, вы должны реализовать это отношение с помощью перечисления (выше) или строковых идентификаторов.

Надеюсь, это помогло, опять же, я не совсем уверен, что именно был вопрос.

...