2017-04-07 65 views
-1

使用下面的代碼,我想使用我的排序函數獲取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

友元函數不是成員。 – aschepler

+0

關於:while(!ins.eof())',請閱讀[爲什麼iostream :: eof在循環條件內被認爲是錯誤的?](http://stackoverflow.com/questions/5605125/why-is-iostreameof-循環內條件考慮錯誤) – user4581301

+0

殘酷地脫離主題:'退出(1);'在'main'中不必''返回1;'' – user4581301

回答

0

擺脫a.。由於Sort是一個免費的功能,你只需要

Sort(a, x); 
0

在C++中,數組不是類對象,所以沒有Sort方法好像有在C#中,但是你可以使用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>而不是更大的運行安全「原始」的陣列,避免需要跟蹤單獨的數組長度:

我注意到你存儲Student對象作爲值,而不是指針,所以將「Student」移動到數組中的另一個索引將會很昂貴,因爲它會複製整個對象。請考慮分別分配Students,而僅對Student*指針的數組進行排序。

0

使用

a.Sort(a, x); 

是夫婦帳戶不正確。

  1. a是數組類型,具體Student [200]類型。數組不具有成員函數。因此,不允許使用a.

  2. Sort是非會員功能。因此不能用.Sort()語法調用。

只需使用:

Sort(a, x); 
相關問題