Неполное Тип
#include "SDL_mixer.h", и это должно быть хорошо 1, 2.
Компилятор не может скомпилировать код, связанный с SDL, без включения SDL, чтобы сообщить ему, что ссылки на эти SDL ссылаются (Mix_Musi, Mix_LoadMUS и т. Д.). См. Учебник SDL_Mixer по адресу kekkai.org/roger 3 В нем есть полный пример.
1 SDL инклюднике
2 Mix_LOadMUS
3 SDL Учебник с полным примером
-
Update: Использование массива музыкального Items
Это пример того, как для доступа к конкретному указателю на Mix _ Музыка из кода нити или в любом месте лексически отделена от выделения переменной указателя. Фактическая реализация может захотеть использовать динамическое распределение массивов и должна добавить обработку ошибок для не найденных файлов или неудачных при загрузке и т. Д.
MEnt.h Общий файл iclude для модулей инициализации и потоков:
#include <cstdlib>
#include "SDL.h"
#include "SDL_mixer.h"
enum { MAXENTRIES=1024 };
struct MEnt{
Mix_Music * music;
char *filename;
};
extern MEnt Marray[MAXENTRIES];
extern int Mselected;
инициализации программы:
#include "MEnt.h"
// Alocate space for array of music items
MEnt Marray[MAXENTRIES];
int Mselected=-1;
В коде потока, включают в себя:
#include "MEnt.h"
// Return a pointer for the selected music item:
// Allocate new Mix_Music* if not already done,
// otherwise return the already allocated pointer.
Mix_Music *getSelected(){
Mix_Music *music;
if(Mselected >= 0 && Mselected < MAXENTRIES){
struct MEnt ¤t=Marray[Mselected];
if(!(music=current.music) &&
(current.filename!=NULL))
music=current.music=
Mix_LoadMUS(current.filename);
}
return music;
}
1. Inclu de заголовочный файл (ы), который объявляет * Mix_Music * и * Mix_LoadUS *. 2. Видимо, вам не нужен адрес музыки указателя; потому что вы показываете только одну функцию, и ей не нужен адрес указателя. 3. Код можно упростить до 'Mix_Music * music = Mix_loadMUS (файл);' – frayser
Вы правы, я не показываю весь код. Дело в том, что мне нужно передать адрес памяти в поток, который будет загружать там файл. Поэтому я хотел бы добавить пустой Mix_Music в какой-то список/карту, а затем передать адрес памяти в поток. Это зависит от того, будет ли он загружать файл или нет. Он отлично работает с другими классами, но я не знаю, как это сделать с Mix_Music. Заголовки включены. – Klokop
Адрес «музыка», который есть «& music», и адрес пустой «Mix_Music» - это разные вещи. «& music» - это адрес указателя * в никуда *, пока не вызывается Mix_LoadMUS(). После этого «& music» указывает на адрес недавно выделенной * struct _Mix_Music *. "Mix_Music mmus;" выделил бы пустой * Mix_Music * в стеке.Использование * static * или * malloc() *, или * new * будет помещено в другое место. Его адрес будет «&mmus"; Но это адрес произвольного * Mix_Music, * не один из MIX_LoadMUS(). Это не полезный адрес, так как Mix_LoadMUS() выделил свои собственные структуры. – frayser