c ++: не-значение в присваивании - PullRequest
1 голос
/ 07 ноября 2011

Привет, я хотел бы сделать внешний единый связанный список. У меня есть проблема с "Не-Ivalue в назначении" и его появлением в строке "this = currP-> next", я попытался сделать его currP.next, но он также выдает ошибку

#include <cstdlib>
using namespace std;


struct node{
       int data;
       node *next;

       node(int i){
                data = i;
                next = NULL;
                }

       void insert(int position, node &n){
            node *currP = this;
            node *prevP= NULL;      
            for(int counter = 0; counter>=position;counter++, prevP = currP, currP = currP->next){
                    if(counter==position)
                    {
                    n.next  = currP->next;
                    currP->next = &n; 
                                         }                     
                    }

            }

       void add(node &n){
       next = &n;          
                 }
       void deleteNode(int i){
            node *currP = this;
            node *prevP = NULL;

            while(currP!= NULL){
               if(currP->data == i){
                  if(prevP == NULL) 
                      this = currP->next;
                  else{   
                      prevP->next = currP->next;
                  }                      
               }                                                  
               prevP = currP;
               currP = currP->next;
            }
        }
 };

Ответы [ 2 ]

5 голосов
/ 07 ноября 2011

lvalue - это переменная, которая может находиться слева от оператора равенства.Это означает, что его значение может быть изменено.Вы не можете изменить значение this, оно просто не разрешено, поэтому ошибка.

Вы можете переписать свою функцию следующим образом:

    node* deleteNode(int i){
        if (  this->data == i )
           return this->next;
        else
        {
           if ( this->next )
              this->next = this->next->deleteNode(i);
           else
              return this;
        }
    }

deleteNode() будетТеперь верните указатель на начало остальной части списка, и рекурсивный алгоритм объединит первую часть с последней.Он не тестировался, поэтому могут потребоваться некоторые корректировки, но я надеюсь, что вы поняли.

4 голосов
/ 07 ноября 2011

lvalue - это семантическое правило.Это означает «левое значение».

Примеры lvalues:

  • Переменная.то есть "a"
  • Адрес памяти.то есть "a [4]" или "* (a + 8)"

this не является lvalue.Вы просто не можете ничего присвоить этому.Это ссылка на метод вызывающий.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...