Невозможно присвоить объект изменчивому объекту - PullRequest
12 голосов
/ 10 января 2011

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

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

class A
{
public:
};

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

Ответы [ 2 ]

19 голосов
/ 10 января 2011

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

class A
{
    public:

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

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

0 голосов
/ 03 мая 2014

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

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

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

const_cast<A &>(a) = b;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...