Оператор присваивания C ++, передающий неконстантный параметр - PullRequest
0 голосов
/ 10 ноября 2018

Я строю свои собственные структуры данных в C ++ для университета, и у меня проблема со структурой данных «очередь». В частности, когда я пытаюсь перегрузить оператор присваивания следующим образом:

Queue& operator=(Queue& C){

   if(this != &C){
     elements = new element_type[C.maxlength];
     maxlength = C.maxlength;
     length = C.length;
     head = C.head;

     if(!C.emptyQueue()){
       for(int i=0; i<length; i++){
         pushQueue(C.readQueue());
       }
       C.pushQueue(C.readQueue());
       C.popQueue();
     }
   }
   return *this;
}

говорит компилятор "не может связать неконстантную ссылку lvalue типа‘ Queue & ’с rvalue типа‘ Queue ’" Но с того момента, как мне нужно изменить входной параметр (чтобы прочитать каждое значение из очереди и вставить его в новую очередь, мне нужно вставить каждый элемент), я думаю, что обязательно передавать его без констант. Есть ли другой способ сделать это, или я что-то упустил?

1 Ответ

0 голосов
/ 10 ноября 2018

Ваш оператор назначения копирования на самом деле является перемещением, а не назначением копирования.

Используйте назначение перемещения:

Queue& operator=(Queue&& C){
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...