- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 SDL 和 SDL_Mixer 为音频创建一个 C++ 应用程序,并且正在尝试遵循 this教程。但是,使用 SDL_Mixer 的 Mix_HookMusicFinished() 不起作用,给出错误:类型 'void (CApp::)()' 的参数与 'void (*)()' 不匹配
我研究过这个错误,问题似乎是 cleanMusic 是 CApp 的一个成员函数。但是,我不知道如何解决这个问题,因为大多数与此类似的问题都围绕着 pthread_create() 展开。我的 cleanMusic() 函数需要能够访问 music_,它是 CApp 的私有(private)变量。我该如何解决错误?
这是 CApp.h、CApp::handleKeyEvents() 和 CApp::cleanMusic() 的代码。如果您需要查看其他内容,请告诉我。
CApp.h
#ifndef CAPP_H
#define CAPP_H
#include <SDL.h>
#include <SDL_mixer.h>
#include <gl\gl.h>
#include <gl\glu.h>
class CApp {
private:
bool isRunning_;
private:
void cleanMusic();
private:
SDL_Surface *surfDisplay_;
Mix_Music *music_;
bool isRotating_;
GLfloat rQuad_;
public:
CApp();
int run();
public:
bool initialize();
void handleEvents(SDL_Event *event);
void loopData();
void render();
void clean();
public:
void handleKeyEvents(SDL_KeyboardEvent *key);
};
#endif // CAPP_H
CApp::handleKeyEvents()
#include "CApp.h"
void CApp::handleKeyEvents(SDL_KeyboardEvent *key) {
switch(key->keysym.sym) {
case SDLK_m:
if (key->state == SDL_PRESSED) {
if(music_ == NULL) {
music_ = Mix_LoadMUS("resources\\audio\\boop.wav");
Mix_PlayMusic(music_, 0);
Mix_HookMusicFinished(cleanMusic);
isRotating_ = true;
} else {
Mix_HaltMusic();
cleanMusic();
isRotating_ = false;
}
}
break;
default:
break;
}
}
CApp::cleanMusic()
#include "CApp.h"
void CApp::cleanMusic() {
Mix_FreeMusic(music_);
music_ = NULL;
}
最佳答案
两个变化。 cleanMusic
需要是static
。
static void cleanMusic();
其次,您注册 Hook :
Mix_HookMusicFinished(&CApp::cleanMusic);
由于您的方法现在是static
,music_
也需要是static
。
static Mix_Music *music_;
这意味着在 CApp 的所有实例化之间只会共享该变量的一个实例。由于我没有看到您的所有代码,因此无法判断这是否是一个问题。
关于c++ - 错误 : cannot convert 'void (CApp::*)()' to 'void (*)()' for argument '1' to 'void Mix_HookMusicFinished(void (*)())' ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16659664/
我正在尝试使用 SDL 和 SDL_Mixer 为音频创建一个 C++ 应用程序,并且正在尝试遵循 this教程。但是,使用 SDL_Mixer 的 Mix_HookMusicFinished() 不
我是一名优秀的程序员,十分优秀!