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 関連のコードをコンパイルして、それらの SDL 参照 (Mix_Musi、Mix_LoadMUS など) が何を参照しているのかを伝えることはできません。kekkai.org/roger の SDL_Mixer チュートリアルを参照してください。 3完全な例があります。
1 SDL インクルード ファイル
2 Mix_LOadMUS
3完全な例を含む SDL チュートリアル
--
更新: 音楽アイテムの配列を使用する
これは、スレッドのコード内から、またはポインター変数の割り当てから字句的に分離された任意の場所から、Mix _ Musicへの特定のポインターにアクセスする方法の例です。実際の実装では、動的配列割り当てを使用したい場合があり、ファイルが見つからない場合やロードに失敗した場合などのエラー処理を追加する必要があります。
MEnt.h 初期化モジュールとスレッド モジュールの共通インクルード ファイル:
#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;
}