Osoitin jäsenfunktioon

void (Luokka::*pFunktio) ();
pFunktio = Luokka::tulostaMuuttuja;

tuo alempi rivi aiheuttaa virheen käännöksessä (dev-C ) eli mitä on vikana?

tässä sitten koko koodi jos sillä on jotain merkitystä tuohon virheeseen

#include
using namespace std;

class Luokka
{
public:
Luokka();
~Luokka();
static int annaStaattinenMuuttuja() {return staattinenMuuttuja;}
static void asetaStaattinenMuuttuja(int arvo);
int annaMuuttuja() {return muuttuja; }
void asetaMuuttuja(int luku);
void tulostaMuuttuja();
private:
static int staattinenMuuttuja;
int muuttuja;
};

int Luokka::staattinenMuuttuja = 0;

Luokka::Luokka()
{
staattinenMuuttuja ;
}

Luokka::~Luokka()
{
staattinenMuuttuja--;
}

void Luokka::asetaMuuttuja(int luku)
{
luku = 0;
muuttuja = luku;
}

void Luokka::tulostaMuuttuja()
{
cout

12

643

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • noniin nyt se toimi kun heitin & merkin ton eteen

      pFunktio = &Luokka::tulostaMuuttuja;

      muuten vielä yksi kysymys mistä tuo jäsenmuuttuja "muuttuja" saa arvokseen 4072496 onko se vain jotain muistiin jäänyttä roinaa vai mitä?

      • mitä tarkoittaa

        mitä tässä tapahtuu?
        void (Luokka::*pFunktio) ();


      • uidshfhio

        sattumanvaraista roinaa se on. alusta se konstruktorissa nollaksi


      • sen kertoo
        mitä tarkoittaa kirjoitti:

        mitä tässä tapahtuu?
        void (Luokka::*pFunktio) ();

        mikä pFunktio on


      • siinä on
        sen kertoo kirjoitti:

        mikä pFunktio on

        tuo "Luokka::" osa? eikö void (*p)(); ajaisi saman asian? (p on pointteri void funktioon, joka ei ota parametreja)


      • pieni ero
        siinä on kirjoitti:

        tuo "Luokka::" osa? eikö void (*p)(); ajaisi saman asian? (p on pointteri void funktioon, joka ei ota parametreja)

        sen funktion käyttö vaatii olion, toisin kuin mainitsemasi pointteri tavalliseen funktioon.


      • ei jymmärrä
        pieni ero kirjoitti:

        sen funktion käyttö vaatii olion, toisin kuin mainitsemasi pointteri tavalliseen funktioon.

        Jos määrittelen void (*p)(); ja minulla on luokka
        A, jossa on metodi void metodi();. ja luon luokasta A instanssin a, niin miksi p:lle ei voi asettaa a.metodi arvoa? Tuossahan a on yksi tietty instanssi ja a.metodi määrää yksikäsitteisesti mihin p:n pitääpi osoitella?

        En myöskään ymmärrä miksi suoran funktiopointterin voi asettaa p=func, kun tässä tapauksessa pitää laittaa p = &luokka::metodi? Miksi tarvitaan toi &-merkki alkuun kun pelkän funktion tapauksessa ei tarvisi?


      • lisää
        ei jymmärrä kirjoitti:

        Jos määrittelen void (*p)(); ja minulla on luokka
        A, jossa on metodi void metodi();. ja luon luokasta A instanssin a, niin miksi p:lle ei voi asettaa a.metodi arvoa? Tuossahan a on yksi tietty instanssi ja a.metodi määrää yksikäsitteisesti mihin p:n pitääpi osoitella?

        En myöskään ymmärrä miksi suoran funktiopointterin voi asettaa p=func, kun tässä tapauksessa pitää laittaa p = &luokka::metodi? Miksi tarvitaan toi &-merkki alkuun kun pelkän funktion tapauksessa ei tarvisi?

        http://www.informit.com/guides/content.asp?g=cplusplus&seqNum=142&rl=1

        ja ehkä tuoltakin:

        http://blogs.msdn.com/the1/articles/210013.aspx


      • kyll maar näin o


      • kiinni
        filosofia kirjoitti:

        pFunktio = &Luokka::tulostaMuuttuja;

        pFunktio = Luokka::tulostaMuuttuja;

        tuon toisen linkin perusteella noitten molempien pitäisi toimia mutta minulla toimi vain tuo ensimmäinen, onko se kääntäjästä kiinni (dev-C )?

        uudemmat tukevat vain &-versiota


      • jaetaan nyt tännekin
        kyll maar näin o kirjoitti:

        Tuolla kyllä kerrotaan miten, mutta ei *miksi*. Tässä on nyt jokin näkymätön c perversio takana, joka ei minulle aukea (tai en jaksa juuri nyt keskittyä noihin artikkeleihin, koitan huomenna täysipäisempänä uusiksi).

        http://groups.google.com/group/sfnet.atk.ohjelmointi/msg/2974f6e7260aff7a
        Josta:

        "Sain meriselityksenä, että kääntäjä kääntää metodin void A::metodi() muotoon void metodi_A(A *this) (tjsp.) eli parametrilistaan lisätään "salainen" osoitin kyseiseen luokkaan ja sille annetaan arvoksi se instanssi, mikä metodin osoittimeen viisaa. Jos siis on void (A::*p)(), a = new A(), p =&A::metodi ja myöhemmin (a.*p)();, niin itseasiassa metodi esitellään void metodi_A(A *this) ja p:n esittelyssä tarvitaan A:: jotta tiedetään p:n ottavan parametrinaan osoittimeen johonkin A:n instanssiin. Kutsussa (a.*p)(); sitten tuupataan parametriksi &a josta saadaan siis käyttöön *this."

        En tiedä onko tämä lopullinen totuus.


    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Elikkä Riikka Purra ei kannusta Suomea edes euroviisuissa

      Sellaista on persujen "isänmaallisuus", oma kansa viimeiseksi ja ulkomaalaiset ensimmäisiksi. https://www.iltalehti.fi/
      Maailman menoa
      153
      2520
    2. Mitä kirjainta haluaisit

      rakastella juuri nyt?
      Ikävä
      158
      2296
    3. Riikka: 3 euron bensa, Ruotsi: bensavero jopa alle EU-minimin

      Eipä vaan suomalainen autoilija saa kaikkien rakastamalta Riikalta sympatiaa. Ruotsissa on eri meininki, siellä diskutee
      Maailman menoa
      55
      1973
    4. Victoria-tytär, 16, vertaa Martina Aitolehteä ja Esko Eerikäistä: "Iskä on enemmän..."

      Martina Aitolehti ja Esko Eerikäinen ovat ex-pari ja heillä on yksi yhteinen tytär, Victoria. Eerikäinen oli Huomenta Su
      Kotimaiset julkkisjuorut
      118
      1897
    5. "UKRAINA HYÖKKÄÄ LATVIAN ÖLJYVARASTOON JA JUNAAN"!!!

      "MATKUSTAJAJUNA SAI UKRAINALAISLENNOKEISTA VAKAVIA VAURIOITA"!!!
      Maailman menoa
      59
      1374
    6. Hilma Hallo-ahon kuvat julki - kiistää SSK ryhmän nimen merkityksen

      Eduskunnan puhemies Jussi Halla-ahon tyttären ympärille on noussut skandaali. Lehdistö sai selville Hilma Hallo-ahon kuu
      Perussuomalaiset
      194
      1237
    7. Sofia Belorf rehellisenä suhteen alusta Jeff-miljonäärirakkaaseen: "Hän ei..."

      Sofia Belórfin elämä on tapetilla Sofia Bling Bling Dubai -realityssä. Näyttävien puitteiden rinnalla Belórf avaa elämää
      Kotimaiset julkkisjuorut
      76
      1026
    8. Miten kestätte tyhmiä?

      Miten usein turhaudutte tai suututte ihmisiin, joilla on matala älykkyys? Minulla tätä tapahtuu useita kertoja viikossa
      Sinkut
      197
      947
    9. Äänestän seuraavissa eduskuntavaaleissa persuja.

      Persut on ainoa puolue, joka aidosti vastustaa islamisaatiota Suomessa.
      Maailman menoa
      326
      940
    10. Kaupungin yt

      Honkolan tai hietaman koulu suljetaan. Säästölistalle on nostettu muun muassa Honkolan tai Hietaman koulun toiminnan l
      Äänekoski
      24
      694
    Aihe