How do I fix the "error: lvalue required as left operand of assignment"

How do I fix the "error: lvalue required as left operand of assignment"

我正在尝试创建一个双向链表并使用一个接受通过引用传递的值的函数。但是,当我尝试访问该值时,它会抛出错误。我收到 "error: lvalue required as left operand of assignment &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;
 }

&da= NULL;

正在尝试将 NULL 设置为变量 da 的地址。你不能那样做。

你可能是说

this->data = &da;

这会 work (如编译),但如果作为 data 传递的字符串在列表超出范围之前就可能会导致错误(这很可能)。

如果您要使用 string*,您可能真正想要的是

this->data = new string(da);

动态分配一个新字符串,将其 da 作为复制来源。在析构函数中,你会想要像

这样的东西
if (data != nullptr) delete data;

我不是标准专家,所以不能给你 lvalues 之类的技术解释。