Russian Qt Forum

Qt => Общие вопросы => Тема начата: megido от Июнь 19, 2016, 00:59



Название: ошибка: cannot call member function without object
Отправлено: megido от Июнь 19, 2016, 00:59
значит есть у меня вот такая функция
Код:
шапка:
static void CALLBACK ProcessBuffer(const void *buffer, DWORD length, void *user);
код:
void  Player::ProcessBuffer(const void *buffer,DWORD length,void *user)
{
    emit SetSongName(time_info);

}
vold Player::Play()
{
    chan = BASS_StreamCreateURL(url,0,BASS_STREAM_BLOCK|BASS_STREAM_STATUS|BASS_STREAM_AUTOFREE,ProcessBuffer,this);
 
}

когда я пытаюсь в ней послать сигнал получаю вот эту ошибку

Код:
ошибка: cannot call member function 'void Player::SetSongName(QString)' without object
     emit SetSongName(time_info);

кстати вызвать из нее другую функцию я тоже не могу

какой объект оно хочет?
                            


Название: Re: ошибка: cannot call member function without object
Отправлено: Bepec от Июнь 19, 2016, 01:17
Без кода можем только анекдот рассказать, за денежку.


Название: Re: ошибка: cannot call member function without object
Отправлено: Racheengel от Июнь 19, 2016, 02:21
а SetSongName помечена как Q_SIGNAL?


Название: Re: ошибка: cannot call member function without object
Отправлено: kambala от Июнь 19, 2016, 02:26
из статического метода сигнал ты не пошлешь, так как это метод на уровне класса, не конкретного объекта.

тебе надо в качестве дополнительного параметра этому коллбэку передавать this (параметр user, насколько я понимаю), потом в коллбэке кастануть user к классу Player и вызвать метод (его надо написать), который внутри и пошлет сигнал.


Название: Re: ошибка: cannot call member function without object
Отправлено: megido от Июнь 19, 2016, 02:32
а SetSongName помечена как Q_SIGNAL?
а как же


Название: Re: ошибка: cannot call member function without object
Отправлено: megido от Июнь 19, 2016, 02:53
из статического метода сигнал ты не пошлешь, так как это метод на уровне класса, не конкретного объекта.

тебе надо в качестве дополнительного параметра этому коллбэку передавать this (параметр user, насколько я понимаю), потом в коллбэке кастануть user к классу Player и вызвать метод (его надо написать), который внутри и пошлет сигнал.
спасибо за наводку. работает
Код:
    Player* pthis = (Player*)user;
    pthis->SetTimeInfo(time_info);