我想将一个对象分配给同一类型的volatile对象,但是由于编译器错误而无法执行此操作。如何改变程序来实现呢?除了让它工作,为什么我不能直接做到这一点?
我在这里使用Visual Studio 2010作为编译器。
class A
{
public:
};
int _tmain()
{
A a;
volatile A va;
va = a; // compiler error:C2678 here
return 0;
}
答案 0 :(得分:19)
您需要使用A
限定符为volatile
定义赋值运算符函数。
class A
{
public:
volatile A& operator = (const A& a) volatile
{
// assignment implementation
}
};
如果没有为类定义赋值运算符,C ++将创建A& operator = (const A&);
的默认赋值运算符。但它不会使用volatile
限定符创建默认赋值运算符,因此您需要明确定义它。
答案 1 :(得分:-1)
我遇到了同样的问题。例如:
struct A { int i; }
volatile A a;
A b;
a = b; // C2678 here.
我找到了解决它的方法:
const_cast<A &>(a) = b;