Qt の個人プロジェクトに TeamSpeak SDK を使用しようとしていますが、このコードをメインで使用すると正常に動作します
問題なくコンパイルされます。問題は、Qt Mainwindow で使用する場合です。
Mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <teamspeak/public_definitions.h>
#include <teamspeak/public_errors.h>
#include <teamspeak/serverlib_publicdefinitions.h>
#include <teamspeak/serverlib.h>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
void onClientConnected(uint64 serverID, anyID clientID, uint64 channelID, unsigned int* removeClientError);
ServerLibFunctions funcs; // it's a struct that have pointer fucntions
};
#endif // MAINWINDOW_H
メインウィンドウ.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
funcs.onClientConnected = onClientConnected; // error here
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::onClientConnected(uint64 serverID, anyID clientID, uint64 channelID, unsigned int* removeClientError) {
char* clientName;
unsigned int error;
/* Query client nickname */
if ((error = ts3server_getClientVariableAsString(serverID, clientID, CLIENT_NICKNAME, &clientName)) != ERROR_ok) {
char* errormsg;
if (ts3server_getGlobalErrorMessage(error, &errormsg) == ERROR_ok) {
printf("Error querying client nickname: %s\n", errormsg);
ts3server_freeMemory(errormsg);
}
return;
}
printf("Client '%s' joined channel %llu on virtual server %llu\n", clientName, (unsigned long long) channelID, (unsigned long long)serverID);
/* Example: Kick clients with nickname "BlockMe from server */
if (!strcmp(clientName, "BlockMe")) {
printf("Blocking bad client!\n");
*removeClientError = ERROR_client_not_logged_in; /* Give a reason */
}
}
Mainwindow.cpp でエラーが発生した行と次のエラーについてコメントしました。
型 'void (MainWindow::)(uint64, anyID, uint64, unsigned int*) から 'MainWindow::onClientConnected' を変換できません {aka void (MainWindow::)(long long unsigned int, short unsigned int, long long unsigned int , unsigned int*)}' を 'void ( )(uint64, anyID, uint64, unsigned int ) {aka void ( )(long long unsigned int, short unsigned int, long long unsigned int, unsigned int )}' 関数と入力します。 onClientConnected = onClientConnected; ^
Windows 10 Mingw コンパイラ Qt 5.6.1
を使用していますが、このコールバック関数を oop c++ で使用するにはどうすればよいですか?