将数据结构作为类函数参数传递

问题描述 投票:0回答:1

对于这个学校项目,我们必须根据从包含此信息的文件中获得的信息创建一个链接列表。

Name:       ID:         GPA:
Alice       8234        2.7
mark        2672        3.0
Joanne      1234        3.7
John        3291        2.0
Tim         3212        3.8
Alford      1034        2.7
Benson      6290        2.5
Nancy       4234        3.7
Oscar       1672        1.0
Larry       1004        2.7

我将这些信息放入数据结构中。现在我尝试使用结构体的 id 变量作为链接列表的排序键,但是我在使用变量

void list::addnode(node key)
key

函数中不断收到错误
#include<iostream>
#include<string>
#include<fstream>
#include<cstdlib>
using namespace std;

typedef struct node
    {
        string name;
        int id;
        float gpa;
        node *next;
    }*nodePtr; 
    node nodeinfo[10];

    nodePtr head;
    nodePtr current;
    nodePtr temp;
class list {
public:

    list();
    void addNode(node);
    void deleteNode(int delData);
    void displayList();
};
list::list() {
    head = NULL;
    current = NULL;
    temp = NULL;
}
void list::addNode(node key) {
    nodePtr n = new node;
    n->next = NULL;
    n->id = key;

    if (head != NULL)
    {
        current = head;
        while (current->next != NULL)
            current = current->next;

        current->next = n;
    }
    else
        head = n;
}
void list::deleteNode(int delData) {
    nodePtr delPtr = NULL;
    temp = head;
    current = head;
    while (current != NULL && current->id != delData) {
        temp = current;
        current = current->next;
    }
    if (current == NULL) {
        cout << delData << " is not in the list\n";
        delete delPtr;
    }
    else
    {
        delPtr = current;
        current = current->next;
        temp->next = current;
        delete delPtr;
        cout << "the value " << delData << "is no longer in the list\n";
    }
}
void list::displayList() {
    current = head;
    while (current != NULL)
    {
        cout << current->id << endl;
        current = current->next;
    }
}
int main() {
    fstream datafile("studentdata.txt");
    list studentinfo;
    node student;

    if (!datafile)
    {
        cout << "Error!!";
        exit(1);
    }
    for (int i = 0; i < 10; i++) {
        datafile >> nodeinfo[i].name >> nodeinfo[i].id >> nodeinfo[i].gpa;
    }
    studentinfo.addNode(student);

    return 0;
}
c++ class oop data-structures linked-list
1个回答
0
投票

您的代码的主要问题是您试图将节点类型变量“key”分配给 int 类型数据成员“n.id”。相反,您可以通过执行 key.id 从 key 访问 id,然后将其分配给 n.id,或者您可以使用 n = key 直接将参数节点“key”分配给节点 n。由于这两个结构体具有相同的数据类型,因此这应该可行,并且是一种更有效的分配值的方法。

然而,这似乎仍然留下很多问题需要从您的代码中提出。我很困惑为什么你选择使用全局变量作为指针?

nodePtr head;
nodePtr current;
nodePtr temp;

如果您决定创建多个列表,这可能会破坏您的代码。即使您不打算制作另一个列表,它仍然是更好的做法,因为它遵循约定并使您的代码更具通用性。

而且你的主要功能几乎完全无法理解。它试图实现什么目标?您似乎正在尝试读取文件并将结果保存在数据文件中,但是您却使用未初始化的学生节点创建节点。您可能应该回顾一下整个主要功能,并尝试关注您想要的结果。

© www.soinside.com 2019 - 2024. All rights reserved.