La definizione di volatili oggetto di classe

Può volatile essere utilizzato per oggetti di classe?
Come:

volatile Myclass className;

Il problema è che non compila,
ovunque quando alcuni, viene richiamato il metodo, l’errore dice:
errore C2662: ‘funzione’ : impossibile convertire da ‘questo’ puntatore ‘volatile Classe’ a ‘MyCLass &’

Quale sia il problema e come risolverlo?

EDIT:

class Queue {
            private:
                struct Data *data;
                int amount;
                int size;
            public:
                Queue ();
                ~Queue ();
                bool volatile push(struct Data element);
                bool volatile pop(struct Data *element);
                void volatile cleanUp();
            };
    .....
    volatile Queue dataIn;

        .....

    EnterCriticalSection(&CriticalSection);
    dataIn.push(element);
    LeaveCriticalSection(&CriticalSection);
Nota che in C++, volatile non garantisce la sicurezza di thread. Diverso da, per esempio, .NET, in cui lo fa.

OriginaleL’autore maximus | 2010-06-20

4 Replies
  1. 15

    Sì, è possibile, ma si può solo chiamare le funzioni membro che siano dichiarati volatile (proprio come il const parola chiave). Per esempio:

     struct foo {
        void a() volatile;
        void b();
     };
    
     volatile foo f;
     f.a(); //ok
     f.b(); //not ok

    Modifica basato sul codice:

    bool volatile push(struct Data element);

    dichiara un nonvolatile membro di una funzione che restituisce un bool volatile (= volatile bool). Vuoi

    bool push(struct Data element) volatile;
    Che cosa circa i costruttori e i distruttori e variabili(proprietà) dichiarato nella classe?
    Ho fatto come hai detto, ma comunque gli stessi messaggi di errore..
    i costruttori e i distruttori non può essere sovraccaricato con volatile (o const), e le variabili membro ereditare queste proprietà di un’istanza della classe. Per quanto riguarda i tuoi messaggi di errore, si prega di inviare il codice esatto che si sta utilizzando.
    Ho aggiunto il codice, si prega di consultare
    Vi ringrazio molto! Ora è tutto ok!

    OriginaleL’autore Jesse Beder

  2. 2

    In C++ la grammatica, il “volatile” e “const” sono chiamati “CV modificatori”. Che significa “volatile”, funziona esattamente allo stesso modo come “const” da sintattica punto di vista.
    È possibile sostituire tutti i “volatili” con “const”, allora si può capire perché il codice viene compilato o non.

    OriginaleL’autore Windoze

  3. 1

    Sì. Siamo in grado di utilizzare. Si prega di vedere il codice modificato.
    Spero che ora dovrebbe funzionare.

    class Queue {
                private:
                    struct Data *data;
                    int amount;
                    int size;
                public:
                    Queue ();
                    ~Queue ();
                    bool push(struct Data element) volatile;
                    bool pop(struct Data *element) volatile;
                    void cleanUp() volatile;
                };
    .....
    volatile Queue dataIn;
    
        .....
    
    EnterCriticalSection(&CriticalSection);
    dataIn.push(element);
    LeaveCriticalSection(&CriticalSection);

    OriginaleL’autore Kuppappa DH

Lascia un commento