2014-10-18 45 views
-1

聲明爲private成員,我必須寫一個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()是朋友函數,但我得到了這個可訪問性錯誤。

我注意到如果總宣佈公開,那就沒有錯誤。 但按照類規範,它必須是私有的。請幫幫我。

+5

'無效排序(學生VAR [], int size)'不是'friend void sort(student,int);'的函數。 – 2014-10-18 18:33:37

+0

朋友無效排序(student [],int);謝謝。 – 2014-10-18 18:36:17

+0

你不需要一個賦值操作符。自動生成的就足夠了。 – 2014-10-18 19:01:11

回答

0

正確的友元函數的聲明看起來像

friend void sort(student[], int); 

有函數聲明,並在你的代碼的函數定義之間的差異。他們不重合 考慮到的是,拷貝賦值運算符的正確的聲明看起來像

student & operator =(const student &);  

也起到主要應返回類型爲int

int main() 
+0

請告訴我const是做什麼的? – 2014-10-18 18:45:55

+0

@Ahhilash Iyer這意味着賦值運算符右側的對象不會被更改。它被認爲是一個不可改變的對象。 – 2014-10-18 18:47:44

+0

好的。還有更多的代碼要添加。排序是爲學生對象完成的,所有的改變都給了我正確的結果。但我必須將通用數據排序爲此代碼的一部分。它可能是int,float,string(當然還有學生對象)。如果使用模板,如何爲不同的數據類型指定代碼? – 2014-10-18 18:52:49