9

volatile 可以用于类对象吗?像:

volatile Myclass className;

问题是它无法编译,当调用某个方法时,到处都是错误消息:error C2662: 'function' : cannot convert 'this' pointer from 'volatile MyClass' to 'MyCLass &'

这里有什么问题以及如何解决?

编辑:

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

4 回答 4

19

是的,您可以,但是您只能调用已声明volatile的成员函数(就像const关键字一样)。例如:

 struct foo {
    void a() volatile;
    void b();
 };

 volatile foo f;
 f.a(); // ok
 f.b(); // not ok

根据您的代码进行编辑:

bool volatile push(struct Data element);

声明一个返回(= )的volatile成员函数。你要bool volatilevolatile bool

bool push(struct Data element) volatile;
于 2010-06-20T04:40:16.890 回答
7

我想他是想说

            bool push(struct Data element) volatile;

代替

            bool volatile push(struct Data element);

也看看这里http://www.devx.com/tips/Tip/13671

于 2010-06-20T05:58:25.640 回答
4

在 C++ 语法中,“volatile”和“const”被称为“CV 修饰符”。这意味着从句法的角度来看,“volatile”的工作方式与“const”完全相同。您可以用“const”替换所有“volatile”,然后您就可以理解为什么您的代码可以编译。

于 2012-08-07T05:01:15.950 回答
3

是的。我们可以用。请查看修改后的代码。我希望它现在应该工作。

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);
于 2015-12-28T10:28:38.447 回答