Witam,
Mam problem ze wskaźnikiem do funkcji. Mam następująca funkcję, używaną przez bibliotekę BASS:
void CALLBACK MySyncProc(HSYNC handle, DWORD channel, DWORD data, void *user)
{
}
Ta metoda jest wywoływana w następujący sposób w kodzie:
BASS_ChannelSetSync(chan, BASS_SYNC_POS, sek_koncowa_bajt, &MySyncProc, 0);
Wtedy wszystko działa.
Tworzony program to aplikacja Qt korzystająca z MainWindow.
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QtGui>
#include <windows.h>
#include "bass.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
QTimer* timer;
DWORD chan;
private slots:
void dodaj();
void play();
void stop();
void update();
};
void CALLBACK MySyncProc(HSYNC, DWORD, DWORD, void*);
#endif // MAINWINDOW_H
W takim układzie wszystko się kompiluje. Chciałbym jednak wskazywaną metodę uczynić częścią mojej klasy (aby ułatwić tworzenie obiektów Qt, na przykład QMessageBox na początek dla testów).
Problem: W jaki sposób wskazać funkcję będącą częścią klasy MainWindow?
Gdy zrobię:
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
void CALLBACK MySyncProc(HSYNC, DWORD, DWORD, void*);
Ui::MainWindow *ui;
QTimer* timer;
DWORD chan;
private slots:
void dodaj();
void play();
void stop();
void update();
};
W kodzie wygląda to teraz tak:
BASS_ChannelSetSync(chan, BASS_SYNC_POS, sek_koncowa_bajt, &MainWindow::MySyncProc, 0);
Otrzymany komunikat o błędzie:
mainwindow.cpp:66: błąd:cannot convert 'void (MainWindow::*)(HSYNC, DWORD, DWORD, void*)' to 'void (*)(HSYNC, DWORD, DWORD, void*)' for argument '4' to 'HSYNC BASS_ChannelSetSync(DWORD, DWORD, QWORD, void (*)(HSYNC, DWORD, DWORD, void*), void*)'
Dziękuje za uwagę.