每当我尝试创建 Mix_Music 实例时,我都会收到此错误:“不允许使用不完整的类型”。
但是,我需要在调用 Mix_LoadMUS(file); 之前获取指针音乐的地址;
代码:
Mix_Music *music;
/* I need the memory address here */
music = Mix_LoadMUS(file);
我该怎么做呢?
每当我尝试创建 Mix_Music 实例时,我都会收到此错误:“不允许使用不完整的类型”。
但是,我需要在调用 Mix_LoadMUS(file); 之前获取指针音乐的地址;
代码:
Mix_Music *music;
/* I need the memory address here */
music = Mix_LoadMUS(file);
我该怎么做呢?
不完整类型
#include " SDL_mixer.h " 应该没问题1 , 2。
如果没有 SDL 包括告诉它那些 SDL 引用(Mix_Musi、Mix_LoadMUS 等)也引用什么,编译器就无法编译与 SDL 相关的代码。请参阅 kekkai.org/roger 上的 SDL_Mixer 教程3它有一个完整的示例。
1 SDL 包含文件
2 Mix_LOadMUS
3 SDL 教程和完整示例
--
更新:使用一系列音乐项目
这是一个示例,说明如何从线程代码中访问指向Mix_Music的特定指针,或者在任何与指针变量分配词法分离的地方。实际实现可能想要使用动态数组分配,并且需要为文件未找到或加载失败等添加错误处理。
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;
}