Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    156

    [c++] passaggio a funzione di valore di scostamento

    in una classe "scosta" ci sono due membri publici int (a e b) ed una funzione scrivi
    volevo fare in modo che questa funzione possa scrivere tanto il valore di a, quanto quello di b, in base al VALORE di SCOSTAMENTO di quei parametri all'interno della classe passato alla funzione.


    codice:
    #include <iostream>
    
    using namespace std;
    
    
    class scosta {
    
    public:
    int a;
    int b;
    scosta() {a=2;b=3;}
    void scrivi(int scosta::*par) {cout<<this.*par<<" ";}  // <---- errore qui
    
    
    };
    
    
    int main()
    {
    scosta obj;
    obj.scrivi(&scosta::a);
    obj.scrivi(&scosta::b);
    }

    maal momento della compilazione da questo errore

    error: cannot apply member pointer 'par' to 'this', which is of non-class type 'scosta*'|

  2. #2
    Utente bannato
    Registrato dal
    Apr 2012
    Messaggi
    510
    par non è un membro della classe e anche se lo fosse quella sintassi sarebbe errata.
    Un esempio di sintassi corretta è questa:

    codice:
    void scrivi(int* par) {cout<<*par<<" ";}
    Ma senza sapere cosa vuoi fare mi è impossibile aiutarti.
    Hai detto:

    volevo fare in modo che questa funzione possa scrivere tanto il valore di a, quanto quello di b, in base al VALORE di SCOSTAMENTO di quei parametri all'interno della classe passato alla funzione.
    Non è chiara questa frase, puoi spiegare in maniera deterministica cosa devi stampare e secondo quale regola?

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    156
    allora, mi spiego meglio.

    invece di fare una funzione che stampi a, e una che stampi b (o farne una che in base al parametro passato stampi l'una o l'altra) folevo farne una che desse libera scelta al programmatore di quale membro stampare

    questa è solo un esempio per vedere se il metodo funzionava, ma poi lo devo applicare ad una classe ben più ampia.

    ora, ho letto poco tempo fa di questi "puntatori a membri di una CLASSE"
    codice:
    tipo classe::*nomepuntatore
    nomepuntatore=classe::membro
    
    classe nomeoggetto;
    // a questo punto nomeoggetto.nomepuntatore è una scrittura valida ed equivalente a 
    // nomeoggetto.membro
    pensavo di poter applicare questo metodo anche al mio caso

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    this è un puntatore, quindi:
    codice:
    cout<< this->*par<<" ";
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    156
    Originariamente inviato da shodan
    this è un puntatore, quindi:
    codice:
    cout<< this->*par<<" ";
    non ci credo, mi perdo in queste cose......

    ok, era questo il problema (ma va?!) grazie a tutti

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.