不完全な型
の#include "SDL_mixer.h" と、それは2、1問題ないはずです。
コンパイラは、これらのSDL参照(Mix_Musi、Mix_LoadMUSなど)が参照するものを示すために、SDLインクルードなしでSDL関連のコードをコンパイルすることはできません。 kekkai.org/roger 3のSDL_Mixerチュートリアルを参照してください。完全な例があります。これは方法の例である音楽アイテム
のアレイを用いた:
アップデート -
1 SDLは完全な例で 3 SDLチュートリアル
Mix_LOadMUS
ファイル
2を含めますへの特定のポインタにアクセスするには、 _ 音楽からスレッドのコード内、またはポインタ変数の割り当てと語彙的に離れている場所。実際の実装では、動的配列割り当てを使用し、ファイルが見つからない、またはロードに失敗したなどのエラー処理を追加する必要があります。
MEnt.h initilizationおよびスレッドモジュールの共通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.もの含めます* Mix_Music *と* Mix_LoadUS *を宣言するヘッダーファイル。 2.明らかにあなたはポインタ音楽のアドレスは必要ありません。 1つの関数しか表示されず、ポインタのアドレスは必要ないためです。 3.コードは 'Mix_Music * music = Mix_loadMUS(file);に簡略化することができます。 – frayser
あなたはそうです、私はコード全体を表示しません。ポイントは、そこにファイルをロードするスレッドにメモリアドレスを渡す必要があることです。ですから、空のMix_Musicをある種のリスト/マップに追加し、メモリアドレスをスレッドに渡したいと思います。スレッドがファイルをロードするかどうかはスレッドに依存します。それは他のクラスとうまく動作しますが、Mix_Musicでどうやってそれを行うのか分かりません。ヘッダーが含まれています。 – Klokop
"音楽"のアドレス、 "&音楽"、空の "Mix_Music"のアドレスは別のものです。 "&music"は、Mix_LoadMUS()が呼び出されるまで、*へのポインタ*のアドレスではありません。その後、 "&music"は、新しく割り当てられた* struct _Mix_Music *のアドレスを指します。 "Mix_Music mmus;"スタックに空の* Mix_Music *を割り当てます。* static *や* malloc()*や* new *を使うと、他の場所に置くことができます。そのアドレスは "&mmus";"ですが、それはMIX_LoadMUS()からのものではなく、任意の* Mix_Music、*のアドレスであり、Mix_LoadMUS()が独自の構造体を割り当てているため有用なアドレスではありません。 – frayser