定义volatile类对象

时间:2010-06-20 04:38:30

标签: c++ volatile

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

volatile Myclass className;

问题是它没有编译, 无处不在调用某个方法时,错误说: 错误C2662:'function':无法将'this'指针从'volatile MyClass'转换为'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 个答案:

答案 0 :(得分:15)

是的,你可以,但是你只能调用声明为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 volatile(= volatile bool)。你想要

bool push(struct Data element) volatile;

答案 1 :(得分:7)

我认为他的意思是

            bool push(struct Data element) volatile;

而不是

            bool volatile push(struct Data element);

另请查看http://www.devx.com/tips/Tip/13671

答案 2 :(得分:2)

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

答案 3 :(得分:1)

是的。我们可以用。请参阅修改后的代码。 我希望它现在能够奏效。

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