Как я могу исправить «ошибка: lvalue требуется как левый операнд присваивания» - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь создать двусвязный список и использовать функцию, которая принимает значение, переданное по ссылке.Однако, когда я пытаюсь получить доступ к значению, он выдает ошибку.Я получаю сообщение "ошибка: lvalue требуется как левый операнд присваивания & da = NULL;"

Я пробовал:

 #ifndef __DOUBLYLINKEDLIST_H__
 #define __DOUBLYLINKEDLIST_H__
 //
 //
 #include
 #include
 using namespace std;

 class DoublyLinkedList {
 public:
 DoublyLinkedList();
 ~DoublyLinkedList();
 void append (const string& s);
 void insertBefore (const string& s);
 void insertAfter (const string& s);
 void remove (const string& s);
 bool empty();
 void begin();
 void end();
 bool next();
 bool prev();
 bool find(const string& s);
 const std::string& getData() const;

 private:
 class Node
 {
 public:
 Node();
 Node(const string& data);
 ~Node();
 Node* next;
 Node* prev;
 string* data;
 };
 Node* head;
 Node* tail;
 Node* current;
 };

 DoublyLinkedList::Node::Node(const string& da)
 {
 this->data=nullptr;
 this->next=nullptr;
 this->prev=nullptr;
 &da= NULL;
 }

1 Ответ

0 голосов
/ 08 февраля 2019

Строка

&da= NULL;

пытается установить в NULL адрес переменной da.Вы не можете этого сделать.

Вы можете иметь в виду

this->data = &da;

, что будет work (как в случае компиляции), но, вероятно, приведет к ошибкам, если строка будет передана как dataвыходит из области видимости, прежде чем ваш список делает (что весьма вероятно).

То, что вы, вероятно, на самом деле хотите, если вы собираетесь использовать string*, это

this->data = new string(da);

, которыйдинамически выделяет новую строку, давая ей da для копирования.В деструкторе вы бы хотели что-то вроде

if (data != nullptr) delete data;

Я не специалист по стандартам, поэтому не могу дать вам техническое объяснение lvalues и тому подобное.

...