使用下面的代码,我想使用我的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;
}
答案 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);
在几个帐户中不正确。
a
是一种数组类型,特别是类型Student [200]
。数组没有成员函数。因此,不允许使用a.
。
Sort
是非会员功能。因此,无法使用.Sort()
语法调用它。
只需使用:
Sort(a, x);