Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1

    Puntatori a funzione

    Ciao sto cercando di utilizzare dei puntatori a funzione su un codice ad oggetti...

    int main() {
    ...
    Poker poker;
    void (*f[2]) () { poker.setCarica(), poker.setComandi() };
    ....
    }

    class Poker {

    public:
    void setPresentazione();
    void setComandi();
    void setCarica();
    void setNuova();
    int scelta;

    private:
    int i, punti;
    char nome[50];
    };

    Perchè mi viene dato questo errore:

    syntax error before `.' token


    Qualcuno sa dirmi come risolvere?

    Perchè a seconda del numero digitato da tastiera volevo far partire una diversa funzione senza usare Switch o IF che penso allunghino troppo il codice... Qualcuno sa suggerirmi quale è il migliore algoritmo da utilizzare?

    Ciao

  2. #2
    codice:
    typedef void (*FNZ_PTR)();
    
    class Poker
    {
    
    public:
    void setPresentazione();
    void setComandi();
    void setCarica();
    void setNuova();
    int scelta;
    
    private:
    int i, punti;
    char nome[50];
    
    }; 
    
    FNZ_PTR fnz;
    ...........
    // esempio
    fnz = setNuova; // fnz = setNuova 
    fnz()
    Poi setti fnz con la funz che ti serve
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  3. #3
    uhhh grazie mille, nel mio libro non ero ancra arrivato ad utilizzare typedef

  4. #4
    FNZ_PTR fnz;
    ...........
    // esempio
    fnz = setNuova; // fnz = setNuova
    fnz()

    ma al posto di setnuova che cosa ci andrebbe?

    Perchè io per stabilere quale funzione metterci ho solo la variabile ID, che ha seconda del valore che ha volevo farli richiamare uan funzione diversa...

  5. #5
    Originariamente inviato da SkOrPiOn`87
    uhhh grazie mille, nel mio libro non ero ancra arrivato ad utilizzare typedef
    a volte il typedef ti salva occhi e testa da tempo perso in ptr a funz
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  6. #6
    Originariamente inviato da SkOrPiOn`87
    FNZ_PTR fnz;
    ...........
    // esempio
    fnz = setNuova; // fnz = setNuova
    fnz()

    ma al posto di setnuova che cosa ci andrebbe?

    Perchè io per stabilere quale funzione metterci ho solo la variabile ID, che ha seconda del valore che ha volevo farli richiamare uan funzione diversa...
    metti il cod che ti metto il tutto con commenti
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  7. #7
    Forse mi sa che non hai capito quello che voglio fare

    Cmq le cose che hai scritto in quali parte del mio codice dovrei metterle? perchè ho diversi file:

    main.cpp
    poker.h
    poker.cpp
    ...

    Ho provato a metterli e mi da errore, e cmq a quanto ho capito io sto definendo un nuovo nome per richiamare la funione setNuova, e ciò che vorrei fare io è quello di richiamare le funzione in questo ordine:

    Input di valore 1: setCarica();
    input di valore 2: setComandi();


    Ciao

  8. #8
    Input di valore 1: setCarica(); ==> fnz = setCarica
    input di valore 2: setComandi(); ==> fnz = setComandi
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  9. #9
    nel titolo: bisogna specificare anche il linguaggio!
    ...Terrible warlords, good warlords, and an english song

  10. #10
    Utente di HTML.it L'avatar di anx721
    Registrato dal
    Apr 2003
    Messaggi
    2,352
    La dichiarazione di un puntatore a una funzione membro è leggermente diversa dalla dichiarazione di un puntatore a una funzione globale, che è quella che ha fatto Luc@s, in particolare, nel puntatore bisogna specificare qual è la classe a cui appartiene la funzione a cui il puntatore punterà:

    Codice PHP:
    class Simple
    public: 
        
    int f(float){
            return 
    1
        }
    };


    int main() {
        
    //Dichairo fp come un puntatore ad una funzione membro della
        //classe Simple, che prende un float e restituisce un intero
        
    int (Simple::*fp)(float);
        
    //Dico ad fp di puntare alla funzione f diSimple
        //(non ho ancora specificato l'oggetto su cui la funzione va invocata!)
        
    fp = &Simple::f;
        
        
    //Creo un oggetto
        
    Simple sim1;
        
    //Invoco la funzione puntata da fp sull'oggetto sim1: nota
        //i due operatori .* e le parentesi
        
    (sim1.*fp)(1.0);
        
        
    //Costruisco dinamicamente un oggetto con new
        
    Simple *sim2 = new Simple();
        
    //Invoco la funzione puntata da fp sull'oggetto sim2: nota
        //i due operatori ->* e le parentesi
        
    (sim2->*fp)(1.0);


    Sun Certified Java Programmer

    EUCIP Core Level Certified

    European Certification of Informatics Professionals

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.