【问题标题】:C++ Error inserting values in Singly Linked List (E0137) [closed]在单链表(E0137)中插入值时出现 C++ 错误 [关闭]
【发布时间】: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


【解决方案1】:

您的代码生成以下错误:在成员函数 'void LinkedList::insertAtEnd(char*, char*, char*, int)': 错误: 将 'char*' 分配给 'char [20] 中的类型不兼容'。您必须将函数参数中的每个值复制到节点(我的意思是对数组中的每个值执行 temp->nome[0] = n[0])。您可以更改节点结构以使用指针而不是数组,这会变得更容易。 如果您想了解更多,请查看以下链接:

https://www.tutorialspoint.com/cplusplus/cpp_passing_arrays_to_functions.htm

【讨论】:

    猜你喜欢
    • 2021-12-22
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多