```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()函数赋值
差这个右圆括号
错误信息还是让我看一吧。单看代码看不出来。
把代码发上来,方便修改查找问题。