无法访问类中声明的私有成员

时间:2014-10-18 18:31:52

标签: c++ friend

我必须编写一个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()是朋友函数,但我收到此可访问性错误。

我注意到如果声明公开,则没有错误。 但根据类规范,它必须是私有的。请帮帮我。

1 个答案:

答案 0 :(得分:0)

正确的朋友函数声明将如下所示

friend void sort(student[], int);

代码中的函数声明和函数定义之间存在差异。它们并不重合 请注意,复制赋值运算符的正确声明将如下所示

student & operator =( const student & );     

函数main也应该有返回类型int

int main()