Dijuna
#cpp #programowanie
Taka zmienna:

class VotingForm {
private:
void (VotingForm::*on_wake)() = Q_NULLPTR;
}

Tak ją wołam:

if (on_wake != Q_NULLPTR) {
on_wake();
}

Kompilator krzyczy to:

C:\Users\dijun\Local\GitHub\RootForPremier\PremierMeetingControl\votingform.cpp:152: error: must use '.*' or '->*' to call pointer-to-member function in '((VotingForm*)this)->VotingForm::on_wake (...)', e.g. '(... ->* ((VotingForm*)this)->VotingForm::on_wake) (...)'
on_wake();
^

Nie za bardzo rozumiem jak mam odpalić tę funkcję, kilku opcji już próbowałem.
2
  • Najlepsze
  • Wszystkie komentarze
TheNewIcek
TheNewIcek
2
TheNewIcek
TheNewIcek
@Dijuna: potrzebujesz obiektu kalsy VotingForm, na ktorym wywolasz te metode
1
lionbest
@Dijuna: Niestety this domyślnie się nie dokleja do wskaźników na metody musisz ręcznie:

this->*on_wake();
1
lionbest
@Dijuna: kurde nie pamiętam priorytetów spróbuj:

(this->*(this->on_wake))()
1
Dijuna
this->*on_wake();


@lionbest: mam ten sam błąd...
@TheNewIcek: jestem w metodzie obiektu tej klasy
0
Dijuna
@lionbest: takie coś musiałem o-----ć:

(((VotingForm*)this)->*on_wake)();

:D
0
lionbest
@Dijuna: Hmmm dziwne...
0
lionbest
@Dijuna: Generalnie nie korzystam z wskaźników do metod bo zazwyczaj są duże, (co najmniej 2*sizeof(void*)), póki nie są constexpr to bym ich omijał. Nie wiem ile zajmują zwykłe lambdy ale też są bezstanowe lambdy które można rzutować na wskaźniki do funkcji.
Ciekawi mnie też poco ci to skoro piszesz w Qt ( ͡° ͜ʖ ͡°)
0
Dijuna
Dijuna Autor
  • adult
Treść przeznaczona dla osób powyżej 18 roku życia...
0
lionbest
@Dijuna: Ja do tej pory jechałem na enumach i switchach, bo jakoś tak bardzo to Qt way, a jak bym potrzebował coś więcej to chyba bym poszedł w QStateMachine.
0
Dijuna
@lionbest: używam QStateMachine, ale to tylko jedna funkcjonalność na szybko, nie mam logicznych argumentów za tym rozwiązaniem :)
0