定义volatile类对象

max*_*mus 6 c++ volatile

volatile可以用于类对象吗?喜欢:

volatile Myclass className;
Run Code Online (Sandbox Code Playgroud)

问题是它无法编译,无论何时调用某个方法,错误都说:错误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);
Run Code Online (Sandbox Code Playgroud)

Jes*_*der 15

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

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

 volatile foo f;
 f.a(); // ok
 f.b(); // not ok
Run Code Online (Sandbox Code Playgroud)

根据您的代码进行编辑:

bool volatile push(struct Data element);
Run Code Online (Sandbox Code Playgroud)

声明了一个 - volatile返回成员函数bool volatile(= volatile bool).你要

bool push(struct Data element) volatile;
Run Code Online (Sandbox Code Playgroud)

  • 那么在类中声明的构造函数和析构函数以及变量(属性)呢? (2认同)
  • @maximus,构造函数和析构函数不能用`volatile`(或`const`)重载,成员变量从类实例继承这些属性.关于您的错误消息,请发布您正在使用的确切代码. (2认同)

小智 7

我想他应该说

            bool push(struct Data element) volatile;
Run Code Online (Sandbox Code Playgroud)

代替

            bool volatile push(struct Data element);
Run Code Online (Sandbox Code Playgroud)

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