Подтвердить что ты не робот

Невозможно назначить объект изменчивому объекту

Я хочу назначить объект для изменчивого объекта в том же типе, но не смог сделать это с ошибкой компилятора. Как изменить программу, чтобы сделать это? Кроме того, чтобы заставить его работать, почему я не могу сделать это напрямую?

Я использовал Visual Studio 2010 в качестве компилятора здесь.

class A
{
public:
};

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

Ответ 1

Вам необходимо определить оператор-оператор присваивания для A с квалификатором volatile.

class A
{
    public:

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

Если вы не определяете оператор присваивания для класса, С++ создаст оператор присваивания по умолчанию A& operator = (const A&);. Но он не будет создавать оператор присваивания по умолчанию с квалификатором volatile, поэтому вам нужно явно определить его.

Ответ 2

Я задал тот же вопрос. Например:

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

Я нашел этот метод для его разрешения:

const_cast<A &>(a) = b;