wskaźnik na funkcje

0

mam kase bee
class bee
{
// w srodku mam wsk na funkcje
bool (bee::*wsk)(DWORD ala);

};

i teraz chce wywołać tą funkcje w innej funkcji innej klasy

bee.wsk(ela); dlaczego wyskakuje mi
error C2064: term does not evaluate to a function taking 1 arguments

0

Uff, niezły z Ciebie sekatoR :D
Teraz to hardcore dowaliłeś.. To nie jest funkcja! To jest metoda (funkcja składowa), która jest zupełnie inaczej traktowana.
Po drugie: samo

wsk

jest też... SKŁADOWĄ klasy, która jest wskaźnikiem składowej! A składowe wymagają specjalnego traktowania :>

#include <iostream>
using namespace std;
class bee
{
public:
    bee() { w = &bee::test; }
    bool test(int i) { cout<<"test with "<<hex<<i<<endl; return true; }
    bool (bee::*w)(int ala);
};

int main()
{
    bee a;

    //!! to jest prawidłowe wywołanie !!
    (a.*(a.w))( 0xdeadbeef );
    //!!

    // Mozna lepszy hardcore przez wskaznik wskaznika :)
    // deklaracja: //
    typedef bool (bee::*mptr)(int); // typ taki jak 'w' klasy bee - wskaznik metody bool (int)
    // wskaznik skladowej klasy,
    // ktora jest wskaznikiem skladowym klasy bee
    mptr bee::*wptr = &bee::w;
    /////////////////
    
    // dereferencja: //
    mptr b = a.*wptr;
    (a.*b)( 111111 );
    // albo
    (a.*(a.*wptr))( 222222 );
    ///////////////////
}

Po trzecie: nie wiem jak sobie poradzi z tym VC++.
Po czwarte: zmień projekt...

0
sekato napisał(a)

bool (bee::*wsk)(DWORD ala);

a po co operator zasiegu 'bee::' ?

0
vixen03 napisał(a)
sekato napisał(a)

bool (bee::*wsk)(DWORD ala);

a po co operator zasiegu 'bee::' ?

...bo to ma być SKŁADOWA klasy?! :P

1 użytkowników online, w tym zalogowanych: 0, gości: 1