Dhaa_Ryan 2020-05-08 16:02 采纳率: 50%
浏览 166

关于C++链表储存和操作对象的问题

最近几天我第一次弄储存对象的链表
然后遇到了这个问题,非常难受
问题主要在这里
图片说明

报错是这个
图片说明

如果改成这样
图片说明

也会报错
图片说明

我人傻了
附上源代码。。。

#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;
//学生类
class student {
private:string id;
private:string name;
private:string sex;
private:string height;
private:string score;
public:void setter(
    string id1 = " ",
    string name1 = " ",
    string sex1 = " ",
    string height1 = " ",
    string score1 = " ") {
    this->id = id1;
    this->name = name1;
    this->sex = sex1;
    this->height = height1;
    this->score = score1;
}
public:string getId() {
    return this->id;
}

public:string getName() {
    return this->name;
}

public:string getSex() {
    return this->sex;
}

public:string getHeight() {
    return this->height;
}

public:string getScore() {
    return this->score;
}
    public:student(
        string id = " ",
        string name = " ",
        string sex = " ",
        string height = " ",
        string score1 = " " 
        ){
        this->id = id;
        this->name = name;
        this->sex = sex;
        this->height = height;
        this->score = score;
    }
};

//链表的结构体模块
struct node{
    int n;
    student stu;
    struct node* next; 
};

//链表添加模块
void linkList_add(student stu1,struct node *p1,struct node** p0,int n) {
    p1 = (struct node*)malloc(sizeof(struct node));
    p1->n = n;
    //对这里面的对象进行复制
    p1->stu.setter(stu1.getId(),stu1.getName(),stu1.getSex(),stu1.getHeight(),stu1.getScore());
    p1->next = NULL;//每一个新结点暂时都当成是最后一个结点
    (*p0)->next = p1; //把头结点的指针指向本新结点
    (*p0) = (*p0)->next;//把p0后移一个结点,为下一个新结点连进来做准备
}

void ListOut(struct node* head){
    while (head->next != NULL) {//表示链没有结束
       head = head->next;
       cout << head->n;
    }
}
int main() {
    struct node* head;  //头结点
    head = (struct node*)malloc(sizeof(struct node));//开辟一个新结点,让head指向它
    struct node* p1= NULL;//用于指向有效数据的新结点
    struct node* p0 = head;//让p0始终指向新结点的前一个结点,它与p1同步向后移


    int count = 1;
    string ifcon = " ";
    student stu;//这是一个用于缓存的student对象
    string id, name, sex, height, score;
    int no;
    cin >> no;
    switch(no) {
    case 1: {
        while (1) {
            cout << "输入'开始/继续'录入学生数据,输入'结束'停止录入" << endl;
            cin >> ifcon;
            if (ifcon == "结束") {
                break;
            }
            else if (ifcon == "开始" || ifcon == "继续") {
                cout << "请输入第" << count << "个学生的学号,姓名,性别,身高,入校成绩" << endl;
                cin >> id >> name >> sex >> height >> score;
                stu.setter(id, name, sex, height, score);
                linkList_add(stu,p1,&p0,114514);
                linkList_add(stu, p1, &p0, 1919810);
            }
            else {
                cout << "输入的指令无效" << endl;
            }
        }
        break;
    };
        case 2:;
        case 3:;
        case 4:;
        case 5:;
    }
    ListOut(head);
}

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2020-09-25 16:51
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 有关wireshark抓包的问题
  • ¥15 需要写计算过程,不要写代码,求解答,数据都在图上
  • ¥15 向数据表用newid方式插入GUID问题
  • ¥15 multisim电路设计
  • ¥20 用keil,写代码解决两个问题,用库函数
  • ¥50 ID中开关量采样信号通道、以及程序流程的设计
  • ¥15 U-Mamba/nnunetv2固定随机数种子
  • ¥15 vba使用jmail发送邮件正文里面怎么加图片
  • ¥15 vb6.0如何向数据库中添加自动生成的字段数据。
  • ¥20 在easyX库下编写C语言扑克游戏跑的快,能实现简单的人机对战