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