8
votes

Définir un objet de classe volatile

La volatilité peut-elle être utilisée pour des objets de classe? Comme: xxx

Le problème est qu'il ne compile pas, Partout où une méthode est invoquée, l'erreur dit: Erreur C2662: 'Fonction': Impossible de convertir 'Ce "pointeur de" MyClass volatile "sur" MyClass & "

Quel est le problème ici et comment le résoudre?

EDIT: xxx


1 commentaires

Notez qu'en C ++, volatile ne garantit pas la sécurité de thread-sécurité. C'est différent de, par exemple, .NET, où il fait.


4 Réponses :


18
votes

Oui, vous pouvez, mais vous ne pouvez ensuite appeler que des fonctions membres déclarées volatiles code> (comme le mot clé const code> ". Par exemple:

bool push(struct Data element) volatile;


3 commentaires

Qu'en est-il des constructeurs et destructeurs et variables (propriétés) déclarés en classe?


@maximus, constructeurs et destructeurs ne peuvent pas être surchargés avec volatile (ou const ) et les variables de membre héritent de ces propriétés de l'instance de classe. En ce qui concerne vos messages d'erreur, veuillez publier le code exact que vous utilisez.


Merci beaucoup! Maintenant tout va bien!



7
votes

Je pense qu'il voulait dire xxx

au lieu de xxx

a aussi un look ici http://www.devx.com/tips/tip/13671


0 commentaires

4
votes

dans la grammaire C ++, "volatile" et "const" sont appelés "modificateurs de CV". Cela signifie que "volatile" fonctionne exactement de la même manière que "const" du point de vue syntaxique. Vous pouvez remplacer tous les "volatiles" par "Const", puis vous pouvez comprendre pourquoi votre code compile ou non.


0 commentaires

3
votes

Yep. On peut utiliser. S'il vous plaît voir le code modifié. J'espère que cela devrait fonctionner maintenant.

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);


0 commentaires