【发布时间】:2019-03-22 13:57:03
【问题描述】:
我创建了一个单链表,它运行良好,直到我将“基本”数据结构从单个 int 值更改为各种变量。
错误发生在 insertAtEnd 函数中,当我尝试存储从临时节点上的参数获取的数据时。
temp->nome = n;
temp->morada = m;
temp->telefone = t;
temp->idade = i;
int 值没有显示错误,但 char[] 得到错误“E0137 - 表达式必须是可修改的左值”。
列表.h
struct node
{
char nome[20];
char morada[30];
char telefone[9];
Int idade;
node *next;
};
class LinkedList
{
private:
node *head;
node *tail;
public:
LinkedList();
~LinkedList();
void insertAtEnd(char n[20], char m[30], char t[9], int i);
void insertAtStart(char n[20], char m[30], char t[9], int i);
void display(void);
void deleteFirst(void);
void deleteLast(void);
void deleteAtPosition(int pos);
};
列表.cpp
(...)
LinkedList::LinkedList()
{
head = NULL;
tail = NULL;
}
void LinkedList::insertAtEnd(char n[20], char m[30], char t[9], int i)
{
node *temp = new node;
temp->nome = n;
temp->morada = m;
temp->telefone = t;
temp->idade = i;
temp->next = NULL;
if (head == NULL)
{
head = temp;
tail = temp;
temp = NULL;
}
else
{
tail->next = temp;
tail = temp;
}
}
(...)
Main.cpp
(...)
LinkedList lista;
char nome[20];
char morada[30];
char telefone[9];
int idade;
(...)
switch (op) {
case 1:
cout << "Inserir nome: ";
cin >> nome;
cout << "Inserir morada: ";
cin >> morada;
cout << "Inserir telefone: ";
cin >> telefone;
cout << "Inserir idade: ";
cin >> idade;
lista.insertAtEnd(nome, morada, telefone, idade);
break;
(...)
这些是我认为与我的项目相关的一些代码块,我几乎可以肯定上面没有其他任何东西对这个问题有影响,但如果你这么认为,请发表评论,我会编辑它。
提前致谢。
【问题讨论】:
-
调试器。使用调试器。调试器允许您单步执行代码,观察变量中的值。通常,使用调试器比发布到 StackOverflow 并等待有人为您检查或调试您的代码要快。
-
在调试链表时,绘制链表(钢笔/铅笔)通常很有帮助。这将帮助您找到与指针相关的问题。
标签: c++ linked-list singly-linked-list