C++ 比较超载的学生<;操作人员

C++ 比较超载的学生<;操作人员,c++,c++11,C++,C++11,这是要比较的字符串,lastname+firstName和id comp是公共的,我的排序方法不起作用,我无法找到代码失败的地方,我应该按顺序列出学生 comp=new char[strlen(lName)+strlen(fName)+strlen(id)+1]; 这是我的学生构装师: Student::Student(char * first, char * last, char *i,char * stand, int credit, double g, Date * d, Date *

这是要比较的字符串,lastname+firstName和id comp是公共的,我的排序方法不起作用,我无法找到代码失败的地方,我应该按顺序列出学生

comp=new char[strlen(lName)+strlen(fName)+strlen(id)+1];
这是我的学生构装师:

Student::Student(char * first, char * last, char *i,char * stand, int credit, double g, Date * d, Date * matricDate){
        lName=last;
        fName=first;
        id=i;
        standing=stand;
        credits=credit;
        gpa=g;
        dob=d;
        matDate=matricDate;
        comp=new char[strlen(lName)+strlen(fName)+strlen(id)+1];
        sprintf(comp,"%s%s%s",lName,fName,id);
};
我是接线员

 bool Student::operator<(const Student &second){
                if(comp<second.comp){
                        return true;
                }else{
                        return false;
                }
        };
这是我喜欢的类型:

void Roster::mySort(){
        sort(roster_list.begin(),roster_list.end());
};
我的主要意见是:

#include<iostream>
#include"Roster.cpp"
#include "Date.cpp"
#include "Student.cpp"

using namespace std;


int main(){

        Roster *r=new Roster();
        Date *d=new Date(12,05,1987);
        Student *st=new Student("Jason", "Sam", "124542", "sophomore", 34, 4.0, d,d);
        Student *st2=new Student("Ahmad", "Khan", "23452", "freshman", 34, 4.0, d,d);

        Student *st3=new Student("Selam", "Can", "23431", "freshman", 34, 3.0, d,d);
        Student *st4=new Student("Andrew", "Rosenberg", "34523", "Senior", 34, 4.0, d,d);
        Student *st5=new Student("Selam", "Can", "23431", "freshman", 34, 3.0, d,d);


        r->addStudent(st);
        r->addStudent(st2);
        r->addStudent(st3);
        r->addStudent(st4);

        // Student 3 and 5 are same 
        // == operator check
        if(*st3==*st5){
                cout<<"Students are same \n";
        }

        // != overloading operator check
        if(*st3!=*st4){
                cout<<"Students are different\n";
        }

        cout<<"################Before Sorting###############\n";
        r->toString();
        cout<<"################After Sorting###############\n";
        r->mySort();
        r->toString();



        cout<<"\n"<<st->getComp();
        cout<<"\n"<<st3->getComp();

        return 0;
}
我试过这个

bool StudentSort(Student* lhs, Student* rhs) {
    return (*lhs)<(*rhs);
}



void Roster::mySort(){
        sort(roster_list.begin(),roster_list.end(),StudentSort);
};

看起来您已将
bool StudentSort
设置为
花名册
的成员函数。你应该让它成为非会员


顺便说一句,你应该使你的
运算符在我看来,每个地方都有指针。我敢打赌这些都不是必需的。@chris这是上次发布此代码时指出的。但是它们比不必要更糟糕,它们实际上是OP各种问题的原因。看起来
comp
只是一个字符指针。我认为比较函数需要做更多的工作才能正常工作。这让我想到
==
=也比较指针,当不使用硬编码的文字字符串时,指针会很快崩溃。@RetiredInja是的,我认为整个东西都坏得很厉害。上次OP发布这篇文章时,我已经建议不要使用指针。这个建议似乎没有任何影响:/
#include<iostream>
#include"Roster.cpp"
#include "Date.cpp"
#include "Student.cpp"

using namespace std;


int main(){

        Roster *r=new Roster();
        Date *d=new Date(12,05,1987);
        Student *st=new Student("Jason", "Sam", "124542", "sophomore", 34, 4.0, d,d);
        Student *st2=new Student("Ahmad", "Khan", "23452", "freshman", 34, 4.0, d,d);

        Student *st3=new Student("Selam", "Can", "23431", "freshman", 34, 3.0, d,d);
        Student *st4=new Student("Andrew", "Rosenberg", "34523", "Senior", 34, 4.0, d,d);
        Student *st5=new Student("Selam", "Can", "23431", "freshman", 34, 3.0, d,d);


        r->addStudent(st);
        r->addStudent(st2);
        r->addStudent(st3);
        r->addStudent(st4);

        // Student 3 and 5 are same 
        // == operator check
        if(*st3==*st5){
                cout<<"Students are same \n";
        }

        // != overloading operator check
        if(*st3!=*st4){
                cout<<"Students are different\n";
        }

        cout<<"################Before Sorting###############\n";
        r->toString();
        cout<<"################After Sorting###############\n";
        r->mySort();
        r->toString();



        cout<<"\n"<<st->getComp();
        cout<<"\n"<<st3->getComp();

        return 0;
}
Students are same 
Students are different
################Before Sorting###############
Student Info:Jason      Sam     124542  sophomore       4
Birth Date: December 5, 1987
Matric Date: December 5, 1987
Student Info:Ahmad      Khan    23452   freshman        4
Birth Date: December 5, 1987
Matric Date: December 5, 1987
Student Info:Selam      Can     23431   freshman        3
Birth Date: December 5, 1987
Matric Date: December 5, 1987
Student Info:Andrew     Rosenberg       34523   Senior  4
Birth Date: December 5, 1987
Matric Date: December 5, 1987
################After Sorting###############
Student Info:Jason      Sam     124542  sophomore       4
Birth Date: December 5, 1987
Matric Date: December 5, 1987
Student Info:Ahmad      Khan    23452   freshman        4
Birth Date: December 5, 1987
Matric Date: December 5, 1987
Student Info:Selam      Can     23431   freshman        3
Birth Date: December 5, 1987
Matric Date: December 5, 1987
Student Info:Andrew     Rosenberg       34523   Senior  4
Birth Date: December 5, 1987
Matric Date: December 5, 1987

SamJason124542
CanSelam23431
bool StudentSort(Student* lhs, Student* rhs) {
    return (*lhs)<(*rhs);
}



void Roster::mySort(){
        sort(roster_list.begin(),roster_list.end(),StudentSort);
};
Roster.cpp: In member function ‘void Roster::mySort()’:
Roster.cpp:69: error: argument of type ‘bool (Roster::)(Student*, Student*)’ does not match ‘bool (Roster::*)(Student*, Student*)’
bool Student::operator<(const Student& second) const {
    return comp<second.comp;
}
bool StudentSort(const Student* lhs, const Student* rhs) { .... }