这个哪里错了啊,请各位同学帮我看看😭

img

img


请定义一个class 学生
数据成员包括:姓名、语文和数学两科成绩及它们的总分、均分;
函数成员包括
·构造函数、析构函数和复制构造函数
函数zfjf()计算某学生的总分和均分
函数 void ortave,按均分从小到大将数组元素排序;(另:定义函数 void ortname,按姓名从小到大将数组元素排序)
在主函数中定义学生类型的数组a[5],并为各自的数据成员:姓名、语文、数学赋值(初始化);完成测试。


```c++
#include <iostream>
#include <cstring>
using namespace std;
class student{
 private:
  char Name[20];
  float chinese,math,sum,ave;
 public:
  student(){
   cout<<"构造函数"<<endl;
  };
  student(student &a){
   strcpy(Name,a.Name);
   chinese=a.chinese;
   math=a.math;
   sum=a.sum;
   ave=a.ave;
   cout<<"复制构造函数"<<endl;
  }
  ~student(){cout<<"析构函数"<<endl;
  }
  void print(){
   cout<<"姓名:"<<Name<<" "<<"语文:"<<chinese<<" "<<"数学:"<<math<<" "<<"总分:"<<sum<<" "<<"均分:"<<ave<<endl;
  }
  void zfjf();
  friend void sortave(student b[],int n);
  friend void sortname(student b[],int n);
}; 
void student::zfjf(){
 sum=chinese+math;
 ave=sum/2;
}
void sortave(student b[],int n){
 student t;
 int i,j;
 for(i=0;i<5-1;i++)
  for(j=0;j<5-i-1;j++)
 if(b[j].ave>b[j+1].ave) {t=b[j];b[j]=b[j+1];b[j+1]=t;
 }
}
void sortname(student b[],int n){
 student t;
 int i,j;
 for(i=0;i<5-1;i++)
  for(j=0;j<5-i-1;j++)
 if(strcmp(b[j].Name,b[j+1].Name)>0){t=b[j];b[j]=b[j+1];b[j+1]=t;
 }
}
int main(){
 student a[5]={student("a",95,95),student("b",98,95),student("c",96,97),student("d",95,98),student("e",96,93)};
 int i;
 a[0].zfjf(a,5);
 for(i=0;i<N;i++) a[i].print();
 a[0].sortave(a,5); 
 for(i=0;i<N;i++) a[i].print();
 a[0].sortname(a,5);
 for(i=0;i<N;i++) a[i].print(); 
 return 0;
}

```

这个t的类型是int,然后name定义的是字符数组,这个没法将int和char[]直接相互赋值的,还有数组也是不能直接赋值的
void sortname(student b[],int n){
int i,j;
char t[20];//t需要定义为字符串
for(i=0;i<5-1;i++)
for(j=0;j<5-i-1;j++)
// if(strcmp(b[j].Name,b[j+1].Name)>0) { t=b[j].Name; b[j].Name=b[j+1].Name; b[j+1].Name=t; }
if(strcmp(b[j].Name,b[j+1].Name)>0){strcpy(t,b[j].Name);strcpy(b[j].Name,b[j+1].Name);strcpy(b[j+1].Name,t);}//字符串无法直接赋值
}

#include <iostream>
#include <cstring>3
#define N 5 
using namespace std;
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
class student{
    private:
        char Name[20];
        float chinese,math,sum,ave;
    public:
        student(){
            cout<<"构造函数"<<endl;         
        }
        student(student &a){
            strcpy(Name,a.Name);
            chinese=a.chinese;
            math=a.math;
            sum=a.sum;
            ave=a.ave;
            cout<<"复制构造函数"<<endl; 
        }
        ~student(){cout<<"析构函数"<<endl;
        }
        void input(){
            cout<<"请输入姓名、语成、数成:"<<endl;
            cin>>Name>>chinese>>math;
        }
        void print(){
            cout<<"姓名:"<<Name<<" 语文:"<<chinese<<" 数学:"<<math<<" 总分:"<<sum<<" 均分:"<<ave<<"\n"<<endl;
        }
        void zfjf();
        friend void sortave(student b[],int n);
        friend void sortname(student b[],int n);
};

void  student::zfjf(){
    sum=chinese+math;
    ave=sum/2;
}

void sortave(student b[],int n)
{
    int i,j,t;
    for(i=0;i<5-1;i++)
        for(j=0;j<5-i-1;j++)
            if(b[j].ave>b[j+1].ave)
                {
                    t=b[j].ave;b[j].ave=b[j+1].ave;b[j+1].ave=t;
                }
}

void sortname(student b[],int n){
    int i,j;
    char t[20];//t需要定义为字符串 
    for(i=0;i<5-1;i++)
        for(j=0;j<5-i-1;j++)
        //    if(strcmp(b[j].Name,b[j+1].Name)>0)    {                    t=b[j].Name;                    b[j].Name=b[j+1].Name;                    b[j+1].Name=t;                }
            if(strcmp(b[j].Name,b[j+1].Name)>0){strcpy(t,b[j].Name);strcpy(b[j].Name,b[j+1].Name);strcpy(b[j+1].Name,t);}//字符串无法直接赋值 
}

int main(int argc, char** argv) {
    student a[N];
    int i;
    for(i=0;i<N;i++)
    {
            a[i].input();
            a[i].zfjf();
    }
    for(i=0;i<N;i++)a[i].print();
    sortave(a,N);
    for(i=0;i<N;i++)a[i].print();
    sortname(a,N);
    for(i=0;i<N;i++)a[i].print();
    return 0;
}

b[j].Name这些都是字符串吗,看你的代码好像是,字符串不能用等号赋值,需要使用strcpy()函数赋值

差这个右圆括号

错误信息还是让我看一吧。单看代码看不出来。

把代码发上来,方便修改查找问题。