2017-04-07 2 views
-1

Mit dem folgenden Code möchte ich meine Sortierfunktion verwenden, um ein Student Array zu nehmen und sie basierend auf ihrer gpa Komponente zu sortieren. Ich muss die Parameter eines Student Arrays und die Größe des Arrays verwenden. Wenn Sie in Richtung der Unterseite meiner int main Funktion schauen, versuche ich, die Elementsortierung aufzurufen, um das Array a zu sortieren, aber ohne Erfolg. Der Fehler, den ich bekomme, ist:Versucht, eine Elementfunktion für ein Klassenarray zu verwenden

Mitgliedsreferenz Basistyp Student [200] ist keine Struktur oder Union.

Wie kann ich Code geschrieben Array zu nehmen a und sagen, das Mitglied Sort zu verwenden, um auf sie die Parameter I zu verwenden. Danke im Voraus. Wenn das zu viel ist, lass es mich wissen, ich werde versuchen, noch mehr zu spezifizieren.

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

Ein Freund Funktion kein Mitglied ist. – aschepler

+0

Betrachte: 'while (! Ins.eof())', lies [Warum wird iostream :: eof innerhalb einer Schleifenbedingung als falsch angesehen?] (Http://stackoverflow.com/questions/5605125/why-is-iostreameof- inside-a-loop-condition-adjusted-wrong) – user4581301

+0

Brutal off topic: 'exit (1);' ist nicht notwendig in 'main' nur' return 1; ' – user4581301

Antwort

0

Entfernen Sie die a.. Da Sort eine freie Funktion ist, brauchen Sie nur

Sort(a, x); 
0

In C++ Arrays sind nicht Klassenobjekte, so gibt es keine Sort Verfahren wie es in C# ist jedoch können Sie std::sort verwenden:

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; 
    } 
); 

ich empfehle, mit std::Array<T> anstelle von „rohem“ Arrays für mehr Laufzeitsicherheit und um zu vermeiden, den Überblick über die Feldlänge getrennt zu halten:

ich nehme zur Kenntnis, dass Siesind speichern-Objekte als Werte, nicht als Zeiger, so "teuer" ein Student zu einem anderen Index im Array wird teuer sein, da es das gesamte Objekt kopieren wird. Ziehen Sie in Betracht, Students separat zuzuweisen und stattdessen nur ein Array von Student* Zeigern zu sortieren.

0

Verwendung von

a.Sort(a, x); 

ist auf einigen Konten nicht korrekt.

  1. a ist ein Array-Typ, insbesondere vom Typ Student [200]. Arrays haben keine Mitgliedsfunktionen. Daher ist die Verwendung von a. nicht zulässig.

  2. Sort ist eine nicht-Elementfunktion. Daher kann es nicht mit der .Sort() Syntax aufgerufen werden.

Verwenden Sie einfach:

Sort(a, x); 
Verwandte Themen