使用类和类型

时间:2013-10-14 01:19:03

标签: c++

我正在尝试尝试这个新项目,因为我被介绍了一段时间,但我不确定这里发生了什么。我确信我可以在int varible中存储一个int,但它告诉我,我无法从int转换为学生,我不知道它试图告诉我什么。有人可以在这里向我解释一下这是在试图告诉我什么或我错过了什么?

#include <iostream>
using namespace std;

class student
{
public:
    int id;            //student ID number
    string name;       //student’s name
    string university; //student’ university
};


//student list is a doubly linked list of students. 
class studentList
{
private:
    class node
    {
    public:
        student data;
        node * next;
        node * prev;
    };

    node * head;

public:
    studentList()
    {
        head = NULL;
    }

    //be sure to free all dynamically allocated memory!
    ~studentList();

    //return true if the list is empty, false if not
    bool empty()
    {
        if(head == NULL)
            return true;
        else
            return false;
    };

    //insert student s into the front of the linked list
    void push(student s)
    {
        node * nodeptr;
        nodeptr = new node();
        nodeptr->data = s;
        nodeptr->next = head;
        head = nodeptr;
        nodeptr->prev = head;
        if (nodeptr->next != NULL)
            nodeptr->next->prev = nodeptr;
    };

    //remove and return the student at the front of the list
    student pop()
    {
        node * nodeptr;
        int y;
        nodeptr = head;
        if (head->next != NULL)
            head->next->prev = head;
        head = head->next;
        y = nodeptr->data.id;
        delete nodeptr;
        return y;
    };

    //locate and remove the student with given ID number
    void removeStudent(int id);

    //locate and return a copy of the student with given ID number
    student getStudent(int id);

    //arrange students into increasing based on either ID or name.  If
    //variable 'field' has value "id", sort into increasing order by id.
    //If 'field' has value "name", sort into alphabetical order by name.
    void sort(string field);

    //a test function to simply display the list of students to the screen
    //in the order they appear in the list.
    void display();
};

2 个答案:

答案 0 :(得分:0)

你声明你的pop()方法正在返回student,但是它返回一个int。

   student pop()
    {
        node * nodeptr;
        int y;
        nodeptr = head;
        if (head->next != NULL)
            head->next->prev = head;
        head = head->next;
        y = nodeptr->data.id;
        delete nodeptr;
        return y; // not an object of student type!!!
    };

您应该返回nodeptr而不是删除它。

答案 1 :(得分:0)

student pop()功能

student pop()
{
    node * nodeptr;
    int y;
    nodeptr = head;
    if (head->next != NULL)
        head->next->prev = head;
    head = head->next;
    y = nodeptr->data.id;
    delete nodeptr;
    return y;
};

您正在尝试返回int y,因为您说返回类型应为student类型,因此如果您想返回int y,则应将其更改为

int pop()
{
    node * nodeptr;
    int y;
    nodeptr = head;
    if (head->next != NULL)
        head->next->prev = head;
    head = head->next;
    y = nodeptr->data.id;
    delete nodeptr;
    return y;
};

如果你想退还学生,你可以这样做

student pop()
{
    node * nodeptr;
    student y;
    nodeptr = head;
    if (head->next != NULL)
        head->next->prev = head;
    head = head->next;
    y = nodeptr->data;
    delete nodeptr;
    return y;
};