2

每当我尝试创建 Mix_Music 实例时,我都会收到此错误:“不允许使用不完整的类型”。

但是,我需要在调用 Mix_LoadMUS(file); 之前获取指针音乐的地址;

代码:

Mix_Music *music;

/* I need the memory address here */

music = Mix_LoadMUS(file);

我该怎么做呢?

4

1 回答 1

3

不完整类型

#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 &current=Marray[Mselected];
       if(!(music=current.music) &&
                  (current.filename!=NULL))
          music=current.music=
                  Mix_LoadMUS(current.filename);
    }
    return music;
}      
于 2010-11-21T06:37:42.033 回答