我必须编写一个C ++代码,还必须对以下类的多个对象进行排序:
class student
{
int roll, m[5], total;
bool pass;
char name[30];
public:
void read();
void result();
void print();
void operator=(student&);
friend void sort(student, int);
};
void sort(student var[], int size)
{
int s,t;
for (s = 0; s<size; s++)
for (t = 0; t<size; t++)
{
if (var[s].total<var[t].total) //---------line 22----------
{
student x;
x = var[s];
var[s] = var[t];
var[t] = x;
}
}
}
void student::operator=(student &x)
{
roll=x.roll;
strcpy_s(name,x.name);
for(int v=0;v<5;v++)
m[v]=x.m[v];
total=x.total;
pass=x.pass;
}
void main()
{
student s[4];
int ni, n;
cout<<"Enter number of student records: ";
cin >> n;
for (ni = 0; ni<n; ni++)
{
s[ni].read();
s[ni].result();
}
sort(s, n);
cout<<endl<<"List sorted based on total: "<<endl;
for (ni = 0; ni<n; ni++)
{
s[ni].print();
}
}
我使用Visual C ++ 2008.当我编译此代码时,它显示两个错误:
Error1 error C2248:'student::total': cannot access private member declared in class 'student'
Error2 error C2248:'student::total': cannot access private member declared in class 'student'
这些错误显示在访问总计时的同一行22。虽然sort()
是朋友函数,但我收到此可访问性错误。
我注意到如果声明公开,则没有错误。 但根据类规范,它必须是私有的。请帮帮我。
答案 0 :(得分:0)
正确的朋友函数声明将如下所示
friend void sort(student[], int);
代码中的函数声明和函数定义之间存在差异。它们并不重合 请注意,复制赋值运算符的正确声明将如下所示
student & operator =( const student & );
函数main也应该有返回类型int
int main()