试图在类数组

时间:2017-04-07 22:27:27

标签: c++ arrays class

使用下面的代码,我想使用我的sort函数来获取Student数组,并根据它们的gpa组件对它们进行排序。我必须使用Student数组的参数和数组的大小。如果你看看int main函数的底部,我会尝试调用成员排序来对数组a进行排序,但是没有用。我得到的错误是:

  

成员引用基类型Student [200]不是结构或联合。

如何根据我必须使用的参数编写我的代码以获取数组a并说使用成员Sort。提前致谢。如果这太多了,请告诉我,我会尝试更多地说明。

class Student
{
    private:
        string ID, fname, lname, level;
        double gpa;
    public:
        Student();
        Student(string id, string first, string last, double Gpa, string grade);

        string getID() const;
        string getfirst() const;
        string getlast() const;
        string getlevel() const;
        double getGPA() const;

        void setID(string id);
        void setfirst(string f1);
        void setlast(string l1);
        void setlevel(string lev);
        void setGPA(double GPA1);

        friend void Sort(Student studentlist[], int size);
        friend ostream& operator <<(ostream& ost, Student S1);
};

int main()
{
    ifstream ins;
    ofstream outs;
    ins.open("input.dat");
    outs.open("output.dat");

    if(ins.fail())
    {
        cout << "File not found.";
        exit(1);
    }

    if(outs.fail())
    {
        cout << "Output file not opened.";
        exit(1);
    }


    Student a[200];
    int x = 0;

    while(!ins.eof())
    {
        string id, fnam, lnam, levl;
        double point;
        ins >> id >> fnam >> lnam >> point >> levl;

        a[x].setID(id);
        a[x].setfirst(fnam);
        a[x].setlast(lnam);
        a[x].setGPA(point);
        a[x].setlevel(levl);


        if(a[x].getID() == "")
        {
            break;
        }

        x += 1;
    }

    if(x == 0)
    {
        cout << "File is empty" << endl;
        return 0;
    }

    x = x +1;
    a.Sort(a, x);

    int t=0;
    while(t<x)
    {
        outs << a[t];
        t += 1;
    }


    outs.close();
    ins.close();
    return 0;
}

3 个答案:

答案 0 :(得分:0)

摆脱a.。由于Sort是免费功能,因此您只需要

Sort(a, x);

答案 1 :(得分:0)

在C ++中,数组不是类对象,因此没有像C#中那样的Sort方法,但是你可以使用std::sort

using namespace std;

Student array[200];
// (populate `array` here)

sort(
    begin(array),
    end(array),
    [](const Student& x, const Student& y) -> bool {
        return x.gpa > y.gpa;
    }
);

我建议使用std::Array<T>而不是“raw”数组来提高运行时的安全性,并避免需要分别跟踪数组长度:

我注意到你将Student个对象存储为值,而不是指针,因此将Student“移动”到数组中的另一个索引将会很昂贵,因为它会复制整个对象。考虑单独分配Students,而只是对Student*指针数组进行排序。

答案 2 :(得分:0)

使用

a.Sort(a, x);

在几个帐户中不正确。

  1. a是一种数组类型,特别是类型Student [200]。数组没有成员函数。因此,不允许使用a.

  2. Sort是非会员功能。因此,无法使用.Sort()语法调用它。

  3. 只需使用:

    Sort(a, x);