C ++ SDL Mixer Mix_Music:不允许使用不完整类型

时间:2010-11-20 14:40:38

标签: c++ sdl-mixer incomplete-type

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

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

代码:

Mix_Music *music;

/* I need the memory address here */

music = Mix_LoadMUS(file);

我该怎么做?

1 个答案:

答案 0 :(得分:3)

不完整类型

#include“SDL_mixer.h”,它应该没问题12

编译器无法在没有SDL包含的情况下编译与SDL相关的代码,以告诉它SDL引用的内容(Mix_Musi,Mix_LoadMUS等)。请参阅kekkai.org/roger{{3}上的SDL_Mixer教程。它有一个完整的例子。

3 SDL包含文件
1 Mix_LOadMUS
2 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;
}