Невозможно назначить объект изменчивому объекту
Я хочу назначить объект для изменчивого объекта в том же типе, но не смог сделать это с ошибкой компилятора. Как изменить программу, чтобы сделать это? Кроме того, чтобы заставить его работать, почему я не могу сделать это напрямую?
Я использовал Visual Studio 2010 в качестве компилятора здесь.
class A
{
public:
};
int _tmain()
{
A a;
volatile A va;
va = a; // compiler error:C2678 here
return 0;
}
Ответы
Ответ 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;