Thomson
Thomson

Reputation: 21625

Can't assign an object to a volatile object

I want to assign an object to volatile object in the same type, but failed to do so with compiler error. How to change the program to make it? Besides to make it to work, why i can't do it directly?

I used Visual Studio 2010 as compiler here.

class A
{
public:
};

int _tmain()
{
    A a;
    volatile A va;
    va = a;        // compiler error:C2678 here
    return 0;
}

Upvotes: 15

Views: 4677

Answers (2)

Liujunxing
Liujunxing

Reputation: 17

I have encounted the same question. For example:

struct A { int i; }
volatile A a;
A b;
a = b;   // C2678 here.

I found this method to resolve it:

const_cast<A &>(a) = b;

Upvotes: -1

Charles Salvia
Charles Salvia

Reputation: 53299

You need to define an assignment operator function for A with the volatile qualifier.

class A
{
    public:

    volatile A& operator = (const A& a) volatile
    {
      // assignment implementation
    }
};

If you don't define an assignment operator for a class, C++ will create a default assignment operator of A& operator = (const A&);. But it won't create a default assignment operator with the volatile qualifier, so you need to explicitly define it.

Upvotes: 22

Related Questions